1.this的作用:
–this表示的是当前对象本身,即this代表当前对象的一个引用。
–但是this不是固定不变的,它会随着执行环境的改变而改变。
2.在方法中this表示该方法所属的对象;单独使用this表示全局对象;在函数中this表示全局对象(但在严格模式下,this 是未定义的);在事件中时this又表示接收事件的元素。类似call()和apply()方法可以将this引用到任何对象。
3.普通方法中使用this时一是区分类成员属性和方法的形参;二是调用当前对象的其他方法(这时的this可以省略);位置任意。
4.在构造方法中使用this表示使用this来调用其它构造方法,这时要注意 位置必须是第一条语句。
5.this不能用于static方法。
▪static 关键字
1.用static声明的成员变量称为静态成员变量,又叫类属性、类变量。它属于类,是所在类的公用变量,可以被被该类的所有实例共享,被载入时显示初始化。在该类static成员变量只会有一份并且被该类的所有对象共享。
2.一般都用"类名.类属性"来调用。使用"对象.类属性"也可以调用。static变量是置于方法区中的
用static声明的方法为静态方法
3.不需要对象,就可以调用(类名.方法名)在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员(这就解释了this为什么不能用于static方法),静态方法不能以任何方式引用this和super关键字。
静态变量不静态方法又称为类变量和类方法
▪代码块
1.概念:使用{}括起来的代码被称为代码块。
2.分类:根据位置可分为:
–局部代码块 –构造代码块
–同步代码块 –静态代码块
普通代码块:直接在方法或语句中定义的代码块,不能单独存在必须要紧跟在方法名后面,同时也必须要使用方法名调用它。
局部代码块:局部位置,限定当前变量的声明周期,可以提高内存利用率。
构造代码块:直接写在类中的代码块,它可以给所有对象进行初始化,每次调用构造方法都会执行,并且在构造方法前执行。
静态代码块:使用static声明的代码块,在类的成员位置,用static{} 只有在类加载的时候,才会执行,且只执行一次,且由于是在类加载时才会执行,所以甚至先于main方法前执行(是在类初始化时执行,不是在创建对象时执行。静态初始化块中不能访问非static成员)。
同步代码块:使用 synchronized 关键字修饰,并使用"{}"括起来的代码片段,它表示同一时间只能有一个线程进入到该方法块中,是一种多线程保护机制。
▪方法调用中的参数传递几个重要点:基本数据类型的参数传递:不能改变参数的值;引用数据类型的参数传递:不能改变参数的值。
▪pakage
1.作用:可以解决类之间的重名问题。且便于管理类可以让合适的类位于合适的包中。
2.package通常是类的第一句非注释性语句。包名:域名倒着写即可,再加上模块名,并不内部管理类。
3.com.gao和com.gao.car两者不是包含关系,是两个完全独立的包,从逡辑上看起来后者是前者的一部分。
▪Import
有利于利于编写和维护。通过import可以导入其他包下面的类,从而可以在本类中直接通过类名来调用。
▪import static
静态导入,作用:用于导入指定类的静态属性。
导入:import com.bjsxt.oop.*;
静态导入:(导入Math类的PI属性)import static java.lang.Math.PI;;之后我们可以在程序中直接使用:System.out.println(PI);
▪面向对象的三大特征
1.继承 inheritance
–继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
(子类可以从父类继承属性和方法,子类可以提供自己单独的属性和方法,子类可以直接访问父类中的非私有的属性和行为)。
–继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object,所以object相当于是祖先类。
–继承提高了代码的复用性,让类与类之间产生了相关的联系(多态的前提)。
–Java只支持单继承,不支持多继承,Java支持多层(多重)继承(继承体系)。
2.封装/隐藏 encapsulation
–封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
– 封装的好处:
让我们可以修改我们自己写的实现代码,而不用修改那些调用我们代码的程序片段;
隐藏类的实现细节,对外隐藏某些属性和方法;
能实现对成员变量进行更精确的控制;
适当的封装可以让我们的程式码更容易理解与维护,也加强了程式码的安全性。
对每个值属性提供对外访问的公共方法,即创建赋值取值的方法,以此来让外部程序对类中的私有属性进行访问。
3.多态 polymorphism
–为了适应需求的多种变化,变得更加使代码通用。就比如当一个操作在不同的对象时,会产生不同的结果,所以多态又是同一个行为具有多个不同表现形式或形态的能力。
–多态具有消除类型之间的耦合关系、可替换性、可扩充性、接口性、灵活性、简化性。多态好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
–多态存在的三个必要条件:继承、重写、父类引用指向子类对象:Parent p = new Child();
▪面向过程只有封装性(功能的封装,而没有数据的封装),没有继承和多态
我们程序设计要追求"高内聚,低耦合"。
java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。
如果导入两个同名的类,只能用包名+类名来显示调用相关类:
java.util.Date date = new java.util.Date()