【java面向对象】

Raow1

关注

阅读 80

2022-03-30

目录

一、面向对象

1、对象:

2、类 class:

3、类的特点:

4、对象的属性:

二、类的实例化对象

三、对象的内存模型

四、静态方法调用

1、使用static修饰的方法是静态方法

2、静态方法的调用

五、非静态方法

2、非静态方法的调用

六、成员变量与局部变量

1、成员变量

2、成员变量有初始值

3、局部变量

4、局部变量不能跨方法读取

5、局部变量没有赋值,去找成员变量,成员变量方法间是共享的

6、成员变量与局部变量的区别

七、静态成员变量

八、匿名对象与引用类型变量

九、对象的属性赋值与读取

十、访问修饰符

十一、封装

十二、参数变量名与引用类型变量时,使用this

十三、Eclipse生成set和get方法

十四、lombok引用

十五、构造方法

1、无参构造方法

2、有参构造方法

3、快捷键生成



一、面向对象

1、对象:

万事万物皆可对象,客观存在的事务都是对象

2、类 class:

类定义了一种抽象的数据类型

类就是模板,确定对象将会拥有的特征(属性)和行为(方法)

3、类的特点:

类是对象的类型

具有相同属性和方法的一组对象的集合

4、对象的属性:

属性:对象具有的各种特征

每个对象的每个属性都拥有特定值

 *      例如:手机类
 *          属性:屏幕尺寸、CPU、内存
 *          方法:打电话、发短信
 *          对象:华为荣耀、小米等

public class Cat {
     /*
      * 品种
      */
	String breed;
	
	/*
	 * 尺寸
	 */
	int size;
	
	/*
	 * 颜色
	 */
	String color;
	
	/*
	 * 年龄
	 */
	int age;
	
	/*
	 * 吃食
	 */
	public static void eat() {
		System.out.println("吃了冻干");
	}
	/*
	 * 饮水
	 */
	public static void drink() {
		System.out.println("喝了牛奶");
	}
	/*
	 * 玩乐
	 */
	public void run() {
		System.out.println("在猫爬架玩耍");
	}
}

二、类的实例化对象

        实例化Cat这个类
        cat是Cat类的实例化对象

类的实例化就是类创建的过程

Cat cat = new Cat();

三、对象的内存模型

      类和对象分别存在栈内存和堆内存中,两个不同的对象,存在地址不同

		Cat cat01= new Cat();
		Cat cat02 = new Cat();
		System.out.println(cat01==cat02);
		System.out.println(cat01);
		System.out.println(cat02);

运行结果

false
com.lihaozhe.day16.bean.Cat@41d477ed
com.lihaozhe.day16.bean.Cat@3590fc5b3

四、静态方法调用

1、使用static修饰的方法是静态方法

	public static void sleep() {
		System.out.println("我在养精蓄锐");
	}

2、静态方法的调用

	public void test01() {
		//静态方法可以通过【类名】.【方法名】的方式调用
		//但是不能通过【类名】.【方法名】的方式调用非静态方法
		Person01.sleep();

五、非静态方法

1、不适用static修饰的方法

	/**
	 *非静态方法 
	 */
	public  void eat() {
		System.out.println("我是个吃货");
		sleep();
	}
	
	/**
	 * 非静态方法
	 */
	public void drink() {
		System.out.println("我们是什么,我么你是兄弟,这酒怎么喝,你干了我随意");
		eat();
	}

2、非静态方法的调用

	public void test02() {
		Person01 person01 = new Person01();
		//静态方法可以通过类的【实例化对象名】.【方法名】的方式调用
		//非静态方法也可以通过【实例化对象名】.【方法名】的方式调用
		person01.drink();
		person01.eat();

六、成员变量与局部变量

1、成员变量

成员变量(有可以叫属性)

成员变量  在类中定义,用来描述对象将要有什么 

在类的方法中定义,在方法中临时保存数据

public int count;

2、成员变量有初始值

输出count值为0

3、局部变量

写在方法里的变量是局部变量

a就是局部变量

	public void fun01() {
		//写在方法里的变量我们称之为局部变量
		int a = 10;

4、局部变量不能跨方法读取

5、局部变量没有赋值,去找成员变量,成员变量方法间是共享的

6、成员变量与局部变量的区别


     *成员变量与局部变量的区别 
     *a)作用域不同 
     *        -局部变量的作用域仅限于定义它的方法 
     *        -成员变量的作用域在整个类内部都是可见的 
     *b)初始值不同
     *        -成员变量有默认初始值 
     *        -局部变量没有默认初始值,必须自行设定初始值 
     *c)同名变量不同
     *         -在同一个方法中,不允许有同名的局部变量
     *         -在不同的方法中,可以有同名的局部变量
     *d)存储位置不同
     *       -成员变量是在对象创建以后存在于堆中,对象回收时,成员变量消失
     *       -局部变量是在方法被调用时存在于栈中,方法调用结束,从栈中清除
     *e)生命周期不同
     *         -随着对象的创建而创建,对象回收时,成员变量消失
     *         -随着方法的调用被创建,方法调用结束,从栈中清除

七、静态成员变量

静态成员变量是共享的

非静态成员变量非共享

	public int x;
	public static int y;

	public void fun() {
		System.out.println("非静态成员变量x的值 >>>" + ++x);
		System.out.println("静态成员变量x的值 >>>" + ++y);
	}
	@Test
	public void test01() {
		Person03 person01 = new Person03();
		Person03 person02 = new Person03();
		//非静态成员变量x的值 >>> 1
		//静态成员变量x的值 >>> 1
		person01.fun();
		//非静态成员变量x的值 >>> 1
		//静态成员变量x的值 >>> 2
		person02.fun();
		//非静态成员变量x的值 >>> 2
		//静态成员变量x的值 >>> 3
		person01.fun();
		//非静态成员变量x的值 >>> 2
		//静态成员变量x的值 >>> 4
		person02.fun();
	}

八、匿名对象与引用类型变量

public class Person04 {
	public void laugh() {
		System.out.println("二十四笑头一笑,仰天长笑");
	}
public class Person04Test {
	@Test
	public void laugh() {
		//person04 引用对象 引用了内存中的一个变量
		Person04 person04 = new Person04();
		person04.laugh();
		//匿名对象
		new Person04().laugh();
		
	}

九、对象的属性赋值与读取

	@Test
	public void test01() {
		Person01 person01 = new Person01();
		Person01 person02 = new Person01();
		System.out.println(person01.nickname);
		System.out.println(person02.nickname);
		System.out.println(person01.gender);
		System.out.println(person02.gender);
		System.out.println(person01.age);
		System.out.println(person02.age);
	}

十、访问修饰符

 * 访问修饰符 public protected default private
 * Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。
 * 
 *public              对所有类可见。使用对象:类、接口、变量、方法
 *protected       对同一包内的类和所有子类可见,使用对象:变量、方法。注意:不能修饰类(外部类)
 *default           (即默认,什么也不写)在同一包内可见,不适用任何修饰符,使用对象:类、接口、变量、方法
 *private            在同一类内可见。使用对象:变量、方法。注意:不能修饰类(外部类)

十一、封装

封装是对于一个类,需要让外部调用者知道的才暴露,不需要让外部调用者知道的全部隐藏起来。

属性一般使用private访问权限,属性私有后,提供相应的get/set方法来访问相关属性。

public class Person04 {
	/**
	 * 昵称
	 */
	private String nickname;

	/**
	 * 性别 1代表男性 0代表女性 默认值为0
	 */
	private int gender;

	/**
	 * 年龄 默认值设置为18
	 */
	private int age = 18;
/**
	 * 封装
	 */
public void setNickname(String nickname) {
		nickname = nickname;
	}

	public String getNickname() {
		return nickname;
	}

	public void setGender(int gender) {
		age = gender;
	}
	public int getGender() {
		return gender;
	}
	public void setAge(int age) {
		age =age;
	}
	public int getAge() {
		return age;
	}
	@Test
    public void test02() {
		Person04 person01 = new Person04();
		Person04 person02 = new Person04();
		person01.setNickname("张三");
		person02.setNickname("李四");
		System.out.println(person01.getNickname());
		System.out.println(person02.getNickname());
		person02.setGender(1);
		System.out.println(person01.getGender()== 1 ? "男" : "女");
		System.out.println(person02.getGender()== 1 ? "男" : "女");
		person01.setAge(20);
		person02.setAge(22);
		System.out.println(person01.getAge());
		System.out.println(person02.getAge());
	}

十二、参数变量名与引用类型变量时,使用this

 * this 方法的调用者 谁调用我 我就是谁
 * this 在此处的含义是调用类中的成员变量

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	public int getGender() {
		return gender;
	}

	public void setGender(int gender) {
		this.gender = gender;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

十三、Eclipse生成set和get方法

右键-->source-->Generate getters and setters-->选择要生成变量即可

十四、lombok引用

使用插件lombok导入@setter和getter即可简化代码

1、打开网址:Maven Repository: Search/Browse/Explore (mvnrepository.com)

2、输入;lombok找到jar文案

 

 

 3、下载jar文件

4、下载完成后,配置lombok文件

在下载文件位置文件地址处输入cmd,跳出控制台之后输入 java -jar ,按Tab快捷键补全代码,运行后弹出对话框,选择一个本地变量,然后进行安装

十五、构造方法

1、无参构造方法

 * 方法名与类名相同,方法体没有返回值,但是再方法声明的时候,却不需要使用void修饰的方法我们称之为构造方法
 * 构造方法的作用:用于初始化对象、对象的属性赋值
 * 没有参数的构造方法,我们称之为无参构造方法
 * 代码中没有编写构造方法,jvm在执行对象初始化的时候,帮助程序追加无参构造方法
 * 注意在一个类中,既没有无参构造方法也没有有参构造方法的时候,jvm不会追加无参构造方法

public class Person01 {
		//public void Person01() {
		//This method has a constructor name
		//方法名与类名相同,方法体没有返回值,但是再方法声明的时候,却不需要使用void修饰的方法我们称之为构造方法
		public Person01() {
			
		}

2、有参构造方法

括号中有内容

		public Person02(String nickname, int gender, int age) {
			this.nickname=nickname;
			this.gender=gender;
			this.age=age;
		}

3、快捷键生成

右键-->source-->Generate Constractor using Files-->不选择任何属性

 生成无参构造

	public Person03() {
		super();
	}

右键-->source-->Generate Constractor using Files-->选择属性

生成全参构造4、

		public Person03(String nickname, int gender, int age) {
			System.out.println("我是有参构造方法");
			this.nickname=nickname;
			this.gender=gender;
			this.age=age;

精彩评论(0)

0 0 举报