2、类类型变量指向对象
3、成员变量:作用于整个类中,在堆内存中,因为对象的存在而存在
局部变量:作用于函数或语句中,在栈内存中
4、封装Encapsulation:隐藏对象的属性和实现细节,仅对外提供公共访问方式。
原则:把不需要对外提供的内容都隐藏起来;把属性都隐藏,提供公共方法对其访问
5、匿名对象使用方式:1)当对象的方法只调用一次时,可以用匿名对象来完成,简化书写;如果对一个对象进行多个成员调用,必须实例化对象。2)将匿名对象作为实际参数进行传递
6、构造代码块:给对象进行初始化,对象一建立就运行,优先于构造函数执行。给所有对象统一初始化,定义的是不同对象共性的初始化内容。
构造函数:给对应对象初始化。当一个类中没有定义构造函数时,系统默认给给该类创造一个空参的构造函数。将构造函数私有化private后,将强制该类不能建立对象
静态代码块:
static
{
//静态代码块中执行的语句
}
特点:随着类的加载而执行,只执行一次,并优先于主函数而执行。用于给类进行初始化
7、this用于区分成员变量和局部变量同名情况,代表所在函数所属对象的引用,哪个对象在调用this所在的函数,this就代表哪个对象。但凡本类功能内部使用本类对象,都用this表示
this语句用于函数间的互相调用,只能定义在构造函数的第一行,因为初始化要先执行。
8、static 用于修饰成员变量和成员函数,被修饰后的成员具备以下特点
- 随着类的加载而加载:静态随着类的消失而消失,生命周期最长
- u 优先于对象存在
- u 被所有对象共享
- u 可以直接被类名调用
使用时注意:静态方法只能访问静态成员;非静态方法即可以访问静态也可以访问非静态;静态方法中不可以写this,super关键字(因为静态优先于对象存在)
利处:对象的共享数据进行单独空间的存储,节省空间
弊端:生命周期过长,访问有局限性(静态只能访问静态)
何时定义静态变量(类变量):对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。
何时定义静态函数:功能内部没有访问到非静态数据(对象特有的数据),该功能可以定义为静态
静态工具类:每一个应用程序中都有共性的功能,将这些功能进行抽取,独立封装,以便复用。
9、实例变量和类变量的区别
存放位置:
类变量随着类的加载而存在于方法区中
实例变量随着对象的建立而存在于堆内存中
生命周期:
类变量生命周期最长,随着类的消失而消失
实例变量生命周期随着对象的消失而消失
10、主函数:特殊的函数,可以被jvm识别,修饰符为static代表主函数随着类的加载就已经存在
11、java文档制作API Application program Iterface:要把一个类制作成帮助文档的话,该类必须被public修饰
set classpath=.;c:\myclass
javadoc –d d:\myhelp -author -version -ArrayToolDemo.java
12、对象的初始化过程:
Person p = new Person(“zhangsan”,20);
- 因为new用到了Person.class,所以先找到Person.class文件加载到内存
- 执行该类中的static代码块,如果有的话给Person.class类进行初始化
- 在堆内存中开辟空间,分配内存地址
- 将内存地址付给栈内存中的p变量
- 在堆内存中建立对象的特有属性,并进行默认初始化
- 对属性进行显示初始化
- 对对象进行构造代码块初始化
- 对对象进行对应的构造函数初始化
13、继承:类与类之间有所属关系才可以继承。
提供代码复用性;让类与类之间产生了关系,有了关系,才有了多态的特性
java语言只支持单继承,不支持多继承,多继承容易带来安全隐患。
java支持多层继承。
14、聚集:聚合与组合
15、覆盖
- 子类覆盖父类,必须保证子类权限大于等于父类权限,才可覆盖,否则编译失败
- 静态只能覆盖静态
- 重载:只看同名函数的参数列表
- 重写:子父类方法要一摸一样
16、子父类中的构造函数
在对子类对象进行初始化时,父类的构造函数也会运行,因为子类的构造函数默认第一行有一条隐式的语句super(),super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()
为什么子类一定要访问父类中的构造函数?
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,因此子类对象在初始化时,要先访问一下父类中的构造函数,如果要访问父类中指定的构造函数,可以手动指定super语句。
注:super语句一定要定义在子类构造函数的第一行
子类的实例化过程
- 子类所有的构造函数,默认都会访问父类中空参数的构造函数,因为子类每一个构造函数内的第一行都有一句隐式的super()。
- 当父类中没有空参数的构造函数时,子类必须手动通过super()形式指定要访问的父类构造函数。当然:子类构造函数的第一行也可以手动指定this语句来访问本类中的构造函数,子类中至少有一个构造函数会访问父类中的构造函数
17、final关键字: 可以修饰类,方法,变量
- final修饰的类不可以被继承
- final修饰的方法不可以被覆盖
- final 修饰的变量是一个常量,只能被赋值一次
- 内部类只能访问被final修饰的局部变量
public staticfinal double PI = 3.14;
18、抽象类
- 抽象方法一定在抽象类中
- 抽象方法和抽象类都必须被abstract关键字修饰
- 抽象类不可以用new创建对象,因为调用抽象方法没有意义
- 抽象类中的抽象方法要被使用,必须由子类复写其所有抽象方法后,建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类