Java基础之面向对象成员变量和局部变量 封装 this关键字

1:成员变量和局部变量的区别(理解)
(1)在类中的位置不同
成员变量:类中方法外
局部变量:方法定义中或者方法声明上
(2)在内存中的位置不同
成员变量:在堆中
局部变量:在栈中
(3)生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
(4)初始化值不同
成员变量:有默认值
局部变量:没有默认值,必须定义,赋值,然后才能使用

2:类作为形式参数的问题?(理解)

	基本类型:形式参数的改变不影响实际参数
	引用类型:形式参数的改变直接影响实际参数

        形式参数为类类型:
		实际参数传递的是一个具体的对象。

3:匿名对象(理解)
(1)没有名字的对象
(2)应用场景
A:调用方法,仅仅只调用一次的时候。
b:可以作为实际参数传递。

4:封装(理解)
(1)隐藏实现细节,提供公共的访问方式
(2)好处:
A:隐藏实现细节,提供公共的访问方式
B:提高代码的复用性
C:提高代码的安全性
(3)设计原则
把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式

(4)private是封装的一种体现。
	封装:类,方法,private修饰成员变量

(5)如何进行封装:
	1.对成员变量进行私有化
	2.提供公开的setXxx/getXxx方法
		set方法:有参数,没有返回值    参数类型与成员变量类型一致
		get方法:有返回值,没有参数    返回值类型与成员变量类型一致
	3.封装后,外界调用时,不可以直接调用成员变量;只能调用公开的setXxx/getXxx方法

5:private关键字(掌握)
(1)私有的意义,可以修饰成员变量和成员方法
(2)特点:
被private修饰的后的成员只能在本类中被访问,外界无法访问
(3)private的应用:
以后再写一个类的时候:
把所有的成员变量给private了
提供对应的getXxx()/setXxx()方法

6:this关键字(掌握)
(1)代表当前类的引用对象
记住:哪个对象调用方法,该方法内部的this就代表那个对象
(2)this的应用场景:
A:解决了局部变量隐藏成员变量的问题
B:其实this还有其他的应用,明天讲解。

7:构造方法(掌握)
(1)作用:用于对对象的数据进行初始化
(2)格式:
A:方法名和类名相同
B:没有返回值类型,连void都不能有
C:没有返回值

(3)构造方法的注意事项
	A:如果我们没写构造方法,系统将提供一个默认的无参构造方法
	B:如果我们给出了构造方法,系统将不再提供默认构造方法
		如果这个时候,我们要使用无参构造方法,就必须自己给出。
		推荐:永远手动自己给出无参构造方法。

8:给成员变量赋值/取值的方式
A:变量赋值
无参构造+setXxx()
带参构造方法
B:变量取值
getXxx();
show();

9:标准案例
class Student {
//1.变量私有化
private String name;
private int age;

		//2.无参有参构造
		public Student(){}
		
		public Student(String name,int age) {
			this.name = name;
			this.age = age;
		}
		
		//3.get/set
		public String getName() {
			return name;
		}
		
		public void setName(String name) {
			this.name = name;
		}
		
		public int getAge() {
			return age;
		}
		
		public void setAge(int age) {
			this.age = age;
		}

		//4普通方法
		public void show(){
			System.out.println(name+"---"+age);
		}
	}
	
	测试:
	class StudentDemo {
		public static void main(String[] args) {
			//方式1
			Student s1 = new Student();
			s1.setName("abc");
			s1.setAge(27);
			System.out.println(s1.getName()+"---"+s1.getAge());
			
			//方式2
			Student s2 = new Student("ABC",30);
			System.out.println(s2.getName()+"---"+s2.getAge());
		}
	}

8:代码:Student s = new Student();做了哪些事情?(理解)
(1)把Student.class文件加载到内存
(2)在栈内存为s开辟空间
(3)在堆内存为学生对象申请空间
(4)给学生的成员变量进行默认初始化。
(5)给学生的成员变量进行显示初始化。
(6)通过构造方法给成员变量进行初始化。
(7)对象构造完毕,把地址赋值给s变量

9:面向对象的练习题(掌握)
(1)标准的手机类的定义和测试
(2)Demo类有求和方法,Test类进行测试。
(3)长方形案例
(4)员工案例
(5)MyMath案例(自己提供加减乘除并测试)

猜你喜欢

转载自blog.csdn.net/weixin_33678114/article/details/88183727