一:面向对象
1、 名词提炼法:人开门
三个特征:封装、继承、多态
以后开发:其实就是找对象使用,没有对象,就创建对象。 其实就是找对象、建立对象、使用对象、维护对象的关系
2、 类和对象的关系
类:对现实生活中事物的描述
对象:就是这类事物,实实在在存在的个体
例如需求:描述汽车(颜色、轮胎数),描述事物其实就是在描述事物的属性和行为
属性对应的是类中的变量,行为对应的是类中的函数(方法)
其实定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法)
3、匿名对象: new Car().color = “blue”;
匿名对象 调用属性没有意义(立马成为垃圾),调用方法有意义。
//匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化,如果对一个对象进行多个成员调用,必须给这个对象
起个名字
//匿名对象使用方式二:可以将匿名对象作为实际参数进行传递
4、封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
封装原则:
1.将不需要对外提供的内容都隐藏起来
2.把属性都隐藏,提供公共方法对其访问
private:私有、权限修饰符,用于修饰类中的成员(成员变量、成员函数),私有只在本类中有效
注意:私有仅仅是封装的一种表现形式
之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码健壮性
5、构造函数
特点: 1、函数名与类名相同 2、不用定义返回值类型 3、不可以写return语句
作用:可以给对象进行初始化。
对象一建立就会调用与之对应的构造函数
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数,当在类中自定义了构造函数后,则系统不再加
构造函数与一般方法的区别:
构造函数时在对象一建立就运行,给对象初始化
而一般方法是对象调用才执行,给对象添加对象具备的功能
一个对象建立,构造函数只运行一次
而一个方法可以被对象调用多次
什么时候定义构造函数呢?
当分析事物时,该事物具备一些特性或者行为,那么将这些内容定义在构造函数中。
6、this代表本类的对象
this代表它所在函数所属对象的引用
构造函数件的调用只能用this语句,并且this语句只能放在构造函数的第一行
Person(String name)
{
this.name = name;
}
Person(String name,int age)
{
this(name); // this语句,this.name = name;
this.age = age;
}
7、static 静态关键字
用法:是一个修饰符,用于修饰成员(成员变量、成员函数)
当成员被静态修饰后,就多了一个调用方式,出了可以被对象调用外,还可以直接被类名调用。 类名.静态成员
static特点:1、随着类的加载而加载 2、优先于对象存在 3、被所有对象所共享 4、可以直接被类名所调用 5、存在于方法区中
静态使用注意事项:
1、静态方法只能访问静态成员,非静态方法既可以访问静态也可以访问非静态
2、静态方法中不能定义this、super关键字,因为静态优先于对象存在
静态的应用:每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用
8、摘出类中的文档注释(/** */): 在命令行下输入 javadoc —d myhelp -author -version ArrayTool.java
如果一个雷需要提供help文档,需要public class ArrayTool
9、静态代码块
10、Person p = new Person(“zhangsan”,20);
分析这句话都做了什么事情:
1、因为new用到了Person.class,所以会找到Person.class文件并加载到内存中
2、执行该类中的static代码块,如果有的话,用来给Person.class类进行初始化
3、在堆内存中开辟空间,分配内存地址
4、在堆内存中建立对象的特有属性,并进行默认初始化
5、对属性进行显示初始化
6、对对象进行构造代码块初始化
7、对对象进行相应的构造函数初始化
8、将内存地址赋给栈内存中的p变量
11、设计模式:解决某一类问题最行之有效的方法,java中有23中设计模式
单例设计模式:解决一个类在内存只存在一个对象
想要保证对象唯一:
1、为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
2、还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
这三步怎么用代码体现呢?
1、将构造函数私有化
2、在类中创建一个本类对象
3、提供一个方法可以获取到该对象
对于事物该怎么描述还怎么描述,当需要将该事物的对象保证在内存中唯一是,就将以上3步加上即可。
12、继承 extends
1、提高代码复用性
2、让类与类之间产生了关系,有了这个关系,才有了多态的特性
聚集:聚合和组合
变量:如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量,用this,子类要访问父类中的同名变量用super
子父类中的函数:
当子类出现和父类一模一样的函数时,当子类对象调用该函数时,会运行子类函数的内容,如果父类的函数被覆盖一样,这种情况是函数的另一个特性:重写 (覆盖)
子类重写父类:必须保证子类权限大于等于父类权限,才可以重写,否则编译失败
静态只能重写静态(了解)
子父类中的构造函数:
在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句super();这个语句会访问父类中空参数的 构造函数,而且子类中所有的构造函数默认第一行都是super();
为什么子类一定要访问父类中的构造函数:
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象初始化时,要先访 问一下父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
注意:super语句一定要定义在子类构造函数的第一行。
this()和super()在构造函数中只能有其一。
13、final关键字:最终,作为一个修饰符
1、可以修饰类、函数、变量
2、被final修饰的类不可以被继承,为了避免被继承,被子类重写功能
3、被final修饰的方法不可以被重写
4、被final修饰的变量是一个常量,只能赋值一次,既可以修饰成员变量,又可以修饰局部变量
当在描述事物时,有些数据的出现值是固定的,那么这时为了增强阅读性,都会给这些值取个名字,但这个值不需要改变,所以加final修饰。
作为常量:常量的书写规范所有字母都大写
例 final double PI = 3.14;
5、内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。
14、抽象类:abstract 关键字。当多个类中出现相同功能,但是功能主题不同,这时可以进行向上抽取。这时只抽取功能定义,而不抽取功能主体。
抽象类的特点:
1、抽象方法一定在抽象类中
2、抽象方法和抽象类都必须被abstract关键字修饰
3、抽象类不可以用new创建对象,因为调用抽象方法没意义。
4、抽象中的方法要被使用,必须由子类重写所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
//需求 : 获取一段程序运行的时间
// 原理 :获取程序开始和结束的时间并相减即可 获取时间:System.currentTimeMillis();
当代码完成优化后,就可以解决这类问题,这种方式,称为模版方法设计模式。在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分 在使用不确定的部分