一、对象:真实存在的唯一的事物。
二、类:同一种类型的事物公共属性与公共行为的抽取。
三、Java面向对象语言:
1、核心思想:找适合的对象做适合的事情。
2、找对象的方式:
方式一:sun已经定义好了很多类,我们只需要认识这些类即可创建对象使用。
方式二:我们需要自定义类,通过自定义类创建对象。
四、自定义类三步骤:
1、 自定义一个类。
class 类{
事物的公共属性使用成员变量描述。
事物的公共行为使用函数描述。
}
2、 可以通过类创建对象。
3、 访问(设置)对象的属性或者调用对象的方法。
五、成员变量与局部变量的区别:
1、 自定义的位置区别:
(1) 成员变量是定义在方法之外,类之内的变量。
(2) 局部变量是声明在方法之内的变量。
2、 作用上的区别:
(1) 成员变量的作用是描述一类事物的属性。
(2) 局部变量的作用是提供一个变量给方法内部使用的。
3、 生命周期的区别:
(1) 成员变量随着对象的创建而存在,随着对象的消失而消失。
(2) 局部变量时调用到了对应的方法执行到了创建该变量的语句时存在,一旦出了自己的作用域马上从内存消失。
4、 初始值的区别:
(1) 成员变量是有默认的初始值的。
(2) 局部变量是没有默认的初始值的,必须要先初始化才能使用。
六、匿名对象:没有引用类型变量指向的对象就称作为匿名对象。
七、匿名对象要注意的细节:
1、 一般不会给匿名对象的属性赋值,因为永远都无法获取到。
2、 两个匿名对象永远都不可能是同一个对象。
八、匿名对象好处:简化书写。
九、匿名对象的应用场景:
1、 如果调用一个对象的方法一次时,然后这个对象就不再使用,那么这时候可以匿名对象。
2、 可以作为实参调用一个函数。
十、封装:将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。
十一、封装的步骤:
1、 使用private修饰需要被封装的属性。
2、 根据需要提供get或者set方法设置以及获取属性。
十二、封装的好处:
1、 提高了数据的安全性。
2、 操作简单。
3、 隐藏了实现。
注意:一般实体类的属性我们都会封装起来。
构造函数:
构造函数的作用:初始化对应的对象。
构造函数的格式:
修饰符 函数名(形式参数){
函数体
}
构造函数要注意的事项:
(1) 构造函数是没有返回值类型的。
(2) 构造函数的函数名是必须与类名一致。
(3) 构造函数不是由我们手动调用的,是我们在创建了对应的对象时,jvm会根据你创建的对象传递的参数调用对应的对象。
(4) 如果一个类没有显示写上一个构造函数的时候,那么java编译器会为该类添加一个无参的构造函数。
(5) 如果一个类已经显示写上一个构造函数的时候,那么java编译器则不会再为该类添加一个无参的构造函数。
(6) 构造函数是可以以函数重载的形式存在多个。
构造代码块:
构造代码块的作用:给对象进行统一的初始化。
构造代码块的格式:
{
代码;
}
构造代码块是在创建了代码块所属类的对象时调用一次。
this关键字:
this关键字代表了所属函数的调用者对象。
this关键字的作用:
(1) 一个类中存在同名的成员变量与局部变量时,在方法的内部默认是访问局部变量的,可以通过this关键字指定访问成员变量得数据。
(2) this关键字还可以在构造函数中调用另外一个构造函数初始化对象。
this关键字调用构造函数要注意的事项:
(1) this关键字调用其他的构造函数时,必须要是在第一个语句。
(2) this关键字调用构造函数时不能出现相互调用,因为是一个死循环。
(3) 如果在方法的内部访问一个变量时,该变量只存在于成员变量中,局部变量没有,这时候java编译器会为该变量前面添加一个this关键字。
static (静态、修饰符)
static修饰成员变量时:static修饰成员变量时,那么该成员变量的数据就是一个共享的数据。
静态成员变量的访问方式:
方式一:使用对象进行访问。
对象.属性名
方式二:可以使用类名进行访问
类名.属性名
注意:
(1) 非静态成员变量不能类名直接访问,只能使用对象进行访问。
(2) 千万不要为了方便访问成员变量而使用static修饰,一定要是该数据是共享数据时才使用static修饰。
static修饰方法(静态的成员方法):
访问方式:
方式一:可以使用对象进行访问。
对象.静态的函数名();
方式二:可以使用类名进行访问。
类名.静态函数名字()。
推荐使用是类名直接访问静态方法
静态函数要注意的事项:
(1) 静态函数是可以调用类名或者对象进行调用的,而非静态函数只能使用对象进行调用。
(2) 静态的函数可以直接访问静态的成员,但是不能直接访问非静态的成员。
原因:静态函数是可以使用类名直接调用的,这时候可能还没有存在对象,而非静态的成员数据是随着对象的存在而存在的。
(3) 非静态的函数是可以直接访问静态与非静态的成员。
原因:非静态函数只能由对象调用,当对象存在的时候,静态数据老早就已经存在了,而非静态数据也随着对象的创建而存在了。
(4) 静态函数不能出现this或者super关键字。
原因:因为静态的函数是可以使用类名调用的,一旦使用类名调用这时候不存在对象,而this关键字代表了一个函数的调用者对象,这时候产生了冲突
静态代码块:静态代码块是类名.class文件加载到内存的时候就马上执行的.
静态的数据的生命周期:
静态的成员变量数据是优先于对象存在的。
/*静态方法与非静态方法的字节码文件是同时存在内存中的,只是静态的成员变量数据是优先于对象存在而已*/
单例设计模式:保证一个类在内存中只有一个对象。
饿汉单例设计模式:
1、 私有化构造函数。
2、 声明本类的引用类型变量并且指向本类的对象,(private static)
3、 提供一个公共静态的方法获取本类对象。
懒汉单例设计模式:
1、 私有化构造函数。
2、 声明本类的引用类型变量,但是不要创建对象。
3、 提供一个公共静态的方法获取本类对象,获取之前先判断是否已经创建了本类的对象,如果没有创建,创建再访问。如果已经创建了,那么直接访问即可。
继承:
继承的格式:
class类名1 extends 类名2{
}
继承要注意的事项:
1、 父类私有的成员不能被继承。
2、 父类的构造函数不能被继承。
3、 创建子类对象时,默认会先调用父类的无参构造函数,然后再调用子类的构造函数。
super 关键字:super关键字代表的是父类的引用空间。
super关键字的作用:
1、 如果子父类存在同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员。
2、 创建子类对象时,默认会先调用父类的无参构造函数,可以通过super关键字指定调用父类的构造函数。
super 关键字要注意的事项:
1、 如果在子类的构造函数中没有指定调用具体父类构造函数,那么java编译器会在子类的构造函数上添加super();
2、 super 关键字调用构造函数时必须出现构造函数中第一个语句。
3、 this 与super调用构造函数的时候不能同时出现在一个构造函数中,因为都需要是第一个语句。
方法重写:子父类存在着同名的函数。
方法重写的需求:如果父类的功能无法满足子类的需求,那么就进行重写。
方法重写的要求:
1、 函数名与形参列表必须一致。
2、 子类的权限修饰符必须大于或者等于父类的权限修饰符。
3、 子类的返回值类型必须小于或者等于父类的返回值类型。
4、 子类抛出的异常类型必须要小于或者等于父类抛出的异常类型。
instanceof 关键字:判断一个对象是否属于某种类型。
instanceof关键字的使用格式:<