目录
六、类的第三个成员:构造器(构造方法) Constructor
十、static关键字:静态的,修饰属性、方法、代码块、内部类
一、面向对象的程序设计:
1.面向对象的设计其实是类的设计
2.设计类其实是设计类的成员
3.类的成员:成员变量&成员方法
扩展:类的成员共有五个:成员变量、成员方法、构造器、代码块、内部类
二、面向对象的落地法则:
1.设计类并设计类的成员
2.通过类来创建对象,注意是用new关键字
3.通过对象名.变量,对象名.方法的形式来完成对象的使用,例如:a1.name;a1.info()
4.使用类创建了对象,该对象就拿到了该类所设计的一个“副本”,
对其中一个对象的属性赋值,不会影响其他对象的该属性的值。
三、类的成员之属性
属性:就是类中的成员变量
成员变量VS局部变量
共同点:1.都是变量,他们的定义形式相同:类型 变量名 = 初始化值;
2.都有作用域:作用域是在一对大括号内
不同点:1.内存中存放的位置不同:
成员变量存放在堆空间内
局部变量存放在栈空间内
2.声明的位置不同(作用域不同):
成员变量声明在类的内部,方法的外部;
局部变量声明在方法的内部。
3.初始化值不同
成员变量可以不赋初值,其默认值按照其数据类型来定
局部变量必须显式地赋初值
4.权限修饰符不同
成员变量的权限修饰符有四个:public (default) protected private
局部变量没有权限修饰符,其访问权限依据其所在的方法而定(与方法的访问权限相同)
四、类的成员之方法
1.实例:
void setName(String n){
name = n;
}
String getName(){
return name;
}
void eat(){
//System.out.println("动物进食");
}
2.格式:修饰符 返回值类型 方法名(形参列表){方法体}
2.1 返回值类型:若方法有返回值,则返回值类型是该返回的值的数据类型;若没有则是void
2.2 形参列表:调用方法时实参传递给形参的“值”,当传递的是基本数据类型时,该“值”是具体的数值;当传递的是引用数据类型时,该“值”是引用数据类型变量的首地址值。
3.注意:方法内可以调用其他方法,但是方法内不能定义新的方法
五、对象的生命周期
1.对象一旦被创建,其生命周期就开始了
2.对象生命周期的结束:一旦对象所在的堆空间的区域没有被任何变量所引用,则意味着对象的生命周期结束了。
六、类的第三个成员:构造器(构造方法) Constructor
1.构造器的作用:
1)创建对象 “new 构造器”==》开辟了空间,创建了对象
2)给创建的对象的属性赋值等一些列初始化操作。
2.构造器的声明的格式:权限修饰符 类名(形参列表){},注意:构造器没有返回值类型,也就是没有返回值
3.如果类中没有显式地声明一个构造器,则系统会默认提供一个空参的构造器;
如果类中显式地声明了一个构造器(无论是否是空参),则系统不再提供空参的构造器。
4.一个类中可以有多个构造器。多个构造器之间构成了构造器的重载。
七、面向对象的特征一:封装
1.出现的场景:当我们直接通过对象.属性的方式给对象的属性赋值时,有可能会出现不满足实际情况(自然规律或特定条件)的意外。那么我们考虑将赋值的操作不通过直接给属性赋值来完成,而是通过方法来完成,将条件体现在方法里,以达到满足实际情况的要求。
2.解决不能直接作用于属性的办法:封装——通过private关键字来实现
private关键字:被private关键字修饰的属性和方法,表示该属性和方法只能在本类中被访问。出了本类就无法访问。注意:在实际使用中,往往将属性私有化,再提供公共的方法访问这些私有化的属性。
八、this关键字:
1.可以用来修饰属性、方法、构造器
2.this理解为当前的对象(或当前正在创建的对象)
比如this.name,this.eat(),表示当前对象的name,当前对象的eat()
3.this可以用来调用构造器,通过“this(形参列表)”显式地调用本类中其他的构造器。
注意:
1)在构造器中通过this来调用其他构造器,则该this必须声明在首行;
2)如果一个类中有n个构造器,则最多只能有n-1个this()构造器调用语句。
九、再讲方法的参数传递
Java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,
而参数本身不受影响,如果参数本身是地址值,则该地址值所指向的空间的内容被影响。
十、static关键字:静态的,修饰属性、方法、代码块、内部类
一、static修饰属性(静态的属性也称为类变量):
1.由类创建的所有的对象都共用该属性
2.当其中一个对象对其属性进行更改,会导致其他对象的该属性的值的变化。
类变量vs实例变量:
实例变量:非static修饰的变量,每个实例(对象)各自拥有一套副本
访问实例变量得通过“对象.属性”的形式访问,而不能通过“类名.实例变量”的形式访问。
3.类变量随着类的加载而加载,加载到静态域里,而且在内存中独一份。
4.可以通过“类名.类变量”的方式直接访问,因为这种方式“类名.类变量”意味着先加载类,再访问类变量。
5.类变量的加载是早于实例变量的,因此也可以通过对象.类变量的形式来访问类变量
6.类变量存在于静态域中。
二、static修饰方式(静态的方法也称为类方法)
1.类方法是随着类的加载而加载,在内存中也是独一份
2.可以通过“类.类方法”的形式调用,也可以通过“对象.类方法”来调用,因为类方法的生命周期早于对象,类方法被回收晚于对象被回收。
3.类方法内不能使用实例变量(即非static修饰的成员变量)
4.类方法内只能出现类变量,同理类变量可以被非static修饰的方法调用。
5.类方法里能否出现this、super关键字?不能
三、static修饰代码块:静态代码块(随着类的加载而加载)
1.代码块:由大括号组成的一个单位,该单位内可以包含多条语句。
1)静态代码块:被static修饰的代码块
2)构造代码块:是声明在方法的外部,类的内部
3)普通代码块:声明在方法的内部
2.加载顺序:
静态代码块>main>构造代码块>构造器>普通代码块