1、创建对象
怎么创建对象的?
类名 变量名 = new 类名();
什么是实例变量?
对象又被称为实例;
实例变量实际上就是:对象级别的变量。
例如:
public class 明星类(){
double height;
}
身高这个属性所有明星都有,但是每个明星都有自己的"身高值",
假设创建10个明星对象,height变量应该有10份。
所以这种变量被称为对象级别的变量。属于实例变量。
实例变量在访问的时候,必须先创建对象。
怎么访问实例变量?
引用.实例变量名
空指针异常 NullPointerException
关于垃圾回收器GC:
在java语言中,垃圾回收器主要针对的是堆内存;
当一个java对象没有任何引用指向该对象的时候,GC会考虑将该垃圾数据释放回收掉。
出现空指针异常的前提条件是:
“空引用”访问实例【对象相关】相关的数据时,都会出现空指针异常。
2、构造方法
什么是构造方法,有什么用?
构造方法是一个比较特殊的方法,通过构造方法可以完成对象的创建,以及实例变量的初始化。
换句话说,构造方法是用来创建对象,并且同时给对象的属性赋值。
重点:当一个类没有提供任何构造方法,系统会提供一个无参数的构造方法。(而这个构造方法被
称为缺省构造器)
当一个类提供了一个构造方法,系统就不会提供一个无参数的构造方法了。
构造方法支持方法重载。
实例变量的默认赋值操作是在构造方法执行的时候进行的。
怎么防止缺省构造器丢失?
建议手动把这个无参的构造方法写出来,这样就不会丢失了。
注意:
第一:修饰符列表目前统一写public,不要写public static
第二:构造方法名必须和类名一致。
第三:不需要返回值类型也不需要void。
3、封装
有了封装,才能继承,有了继承才能说多态
在代码级别上,封装的作用是:
一个类体当中的数据,封装之后,对于代码的调用人员来说,不需要关心代码的复杂实现,
只需要通过一个简单的入口就可以访问了,另外,类体中安全级别较高的数据封装起来,外部人员
不能随意访问,来保证数据的安全性。
封装的代码实现两步:
第一步:属性私有化;
第二步:1个属性对外提供set和get方法。外部程序只能通过set设置,通过get读取,可以在set方法中
设立关卡来保证数据的安全性。
带static和不带static方法的区别:
带static:静态方法
调用方式:类名.方法名();
不带static:实例方法,又叫对象方法(同实例变量)
调用方式:引用.方法名();
get及set方法格式(开发规范要求)
get方法
public 返回值类型 get+属性名首字母大写(无参){
return xxx;
}
set方法
public void set+属性名首字母大写(有一个参数){
xxx = 参数;
}
4、static关键字
所有static修饰的都是类相关的,类级别的。
所有static修饰的,都是采用“类名.”的方式去访问;
成员变量分为:
静态变量
实例变量
什么时候声明为实例变量?什么时候修饰为静态变量?
在一个类中,每个对象有自己的属性的声明为实例变量,这个类中的所有对象都一样的声明为静态变量
什么时候声明为实例方法?什么时候定义为静态方法?
方法一般是描述了一个行为,如果说该行为必须由对象去触发,那么该方法定义为实例方法。
参考标准:或者说,当这个方法体中直接访问了实例变量,这个方法一定是实例方法。
我们以后的开发中,大部分情况下,如果是工具类的话,工具类当中的方法一般都是静态的。
静态代码块
在类加载时执行,并且只执行一次
静态代码块在main执行之前自上而下执行(main执行在类加载后了)
静态代码块提供给程序员这样一个位置,如果有业务需要在类加载的时候,可以写在这里。
实例语句块
任何一个构造方法执行前执行,构造方法执行几次,实例语句块就执行几次。
类似于static的类加载时机,这也是一个特殊的时机,叫做对象构建时机;
你构造了很多个构造方法,这些方法前面有一部分的语句都是一样的?
这种情况下,我们就可以把这些相同的代码提取出来放到实例语句块中去。
5、this关键字
this保存当前对象的内存地址,指向自身;
所以this代表的是:"当前对象";
this不能用在静态方法中,因为静态方法中不存在当前对象。
在实例方法或构造方法中,为了区分局部变量和实例变量时不能省略:
this.name = name;
this()的作用:
代码复用
this()的调用只能出现在构造方法的第一行,且只能有一行
this(实际参数列表);
通过一个构造方法1去调用构造方法2
6、继承extends
继承相关的特性
一、B类继承A类,则称A类为:超类(superclass)、父类、基类;
称B类为:子类(subclass)、派生类、扩展类;
二、java中的继承只支持单继承,不支持多继承。c++中支持多继承,这也是java体现简单性的一点,
换句话说,Java中不允许这样写代码:class B extends A,C{}。
三、虽然java中不支持多继承,但有的时候会产生间接继承的效果。例如class C extends B{},class B extends A{};
也就是说,C直接继承B,其实C还间接继承A。
四、Java中规定,子类继承父类,除构造方法外,剩下的都可以继承。但是private修饰的属性不能在子类中访问。
五、java中的类没有显示继承任何类,则默认继承Object类,Object类是java语言中提供的根类(老祖宗类),
也就是说,一个对象与生俱来就有Object类型中所有的特征。
六、继承也存在一些缺点,例如:CreditAccount类继承Account类会导致他们之间的耦合度非常高,
Account类发生改变后会马上影响到CreditAccount类。
“is a”能描述的,都可以继承;