1.static:静态的,可以用static修饰成员属性,成员方法.
1.1:静态属性:用static修饰成员属性叫静态属性.
1.1.1:静态属性特征:静态属性属于类,类的所有对象共享.只要被静态修饰的在java运行程序的时候最先运行
静态属性的缺点:静态属性耗内存.
1.1.2:静态属性生命周期:随着类的加载而产生,随着类销毁而销毁.
1.1.3:静态属性适用场景:当一个类所有对象想共用某个属性时,这个属性就可以声明为静态的.
1.1.4:静态属性的调用:
同一个类中:静态属性名;
不同的类中:类名.静态属性名; (推荐)
对象名.静态属性名;
1.2:静态方法:用static修饰的方法叫静态方法.静态方法属于类.
1.2.1:静态方法的特征:
成员方法中既可以直接调用静态属性和方法也可以直接调用非静态属性和方法.
静态方法中只能直接调用静态属性和静态方法,不能直接调用非静态的属性 和非静态的方法;如果想调用只能通过对象调用非静态属性和方法.
1.2.2:静态方法的调用:优点:用类名可以直接调用,方便.
同一个类中:方法名(实参列表);
不同类中:类名.方法名(实参列表);
对象名.方法名(实参列表);
1.2.3:静态方法的适用场景:当一个类为工具类,这个类中方法就可以声明为静态方法.
(因为java先运行静态修饰的。如果你不需要访问一个对象的值,请保证这个方法是static类型的,这样方法调用将快15%-20%。这是一个好的习惯,因为你可以从方法声明中得知调用无法改变这个对象的状态)
1.3:静态块:在类加载时执行,一生只执行一次.
1.3.1:语法: static{
代码;
}
1.3.2:作用:在类加载时初始化变量和部分数据.
1.3.3:静态块的特征:静态块中只能静态的东西,不能直接调用非静态的东西.
eg:public class Employee {
1.4:静态导入(了解):当一个类中所有属性或方法是静态的,然后要频繁调用这个类中静态属性和方法,不想写类名调用时,就可以用静态导入.
语法:import static 包名.类名.*;
2.封装:隐藏事物内部细节,提供对外访问方法.是面向对象语言三大特性之一.
2.1:封装的作用:提高代码复用性和可维护性;保护数据安全.(就是为了属性不被随便的调用随便的赋值)
2.2:封装的应用
方法:对功能的封装.作用:提高代码复用性和可维护性
属性封装:私有化属性,给属性公有get获得属性的方法和set给属性设值的方法.
作用:保护数据安全.
快速生成属性的get和set方法:在类的空白地方-> 右键-> Source-> Generate Getters and Setters-> 在要封装的属性前打勾-> 点击Generate按纽。
eg:/**
* 私有化年龄属性,给属性提供公有的get和set方法
*/
private int sage;
/**
* 获得属性的方法
* @return int
*/
public int getSage() {
return sage;
}
/**
* 给属性赋值的方法
* @param sage
*/
public void setSage(int sage) {
if (sage>0&&sage<=150) {
this.sage = sage;
} else {
System.out.println("年龄输入错误!");
}
}
3.继承:逻辑满足is-a
3.1:继承的作用:简化代码,提高代码的复用性.
3.2:继承的关键字:extends
3.3:被继承的类:父类,基类,超类,根类
继承的类:子类,衍生类,派生类
3.4:子类可以继承父类的公有的或受保护的属性和方法,不能继承父类私有属性和私有方法.子类不能继承父类构造方法.
3.5:创建子类对象时,一定先调用父类构造方法再调用子类构造方法.(因为每个构造器中都有一个super()方法)
如果子类没有写代码调用父类构造方法,系统默认先调用父类无参构造方法,再调用子类构造方法;如果子类写代码调用父构造方法,系统不会默认调用父类构造,而是按照我们写的代码来调用父类指定构造方法,再调用子类指定构造方法.
3.6:继承特性:
单根性:一个类只能直接继承一个父类.
传递性:A类继承B类,B类继承C类,A类间接继承C类.
4.super:指代父类对象引用.
4.1:super可以调用父类属性:super.属性名
4.2:super可以调用父类的方法:super.方法名(实参列表)
4.3:super可以调用父类的构造方法:super(实参列表);
注意:super调用构造方法必须写在构造方法的第一句.
5.方法重写:
5.1:方法重写的适用场景:当子类继承父类的方法后,这个方法无法满足子类需求时,就可 以在子类中用方法重写.
5.2:方法重写的条件:
5.2.1:方法重写发生在有继承关系的子类中.
5.2.2:子类中重写的方法要与父类被重写的方法的方法名和形参列表相同.
5.2.3:子类中重写的方法的返回值类型与父类被重写的方法的返回值类型兼容.
5.2.4:子类中重写的方法的访问修饰符与父类被重写的方法的访问修饰符相同或更大.
5.3:重写的方法上面用@Override,系统会自动检查当前的方法是否是重写父类的方法,如果不是会报错.
6.方法重写 VS 方法重载
6.1:适用场景不同:方法重写是当子类继承父类的方法,这个方法无法满足子类需求时,才需要方法重写;方法重载是解决同一个类中功能相同,方法命名和调用问题.
6.2:条件不同:方法重写的条件是发生有继承关系的子类中,且子类重写的方法的方法名,参数列表与父类被重写的方法的方法名和参数列表相同,返回值类型兼容,访问修饰符相同或更大.
方法重载的条件:在同一个类中,方法名相同,参数列表不同.
6.3:检查不同:方法重载的几个方法靠开发人员自己检查是否是重载;
方法重写是可以在重写的方法上面用@Override,让系统帮我们检查.
6.4:方法的返回值和修饰符的关系:
方法重写与方法的返回值类型和访问修饰符有关;
方法重载与方法的返回值类型和访问修饰符无关.
7.访问修饰符
8.包的作用:帮我们管理类;解决类名同名的问题(在同一个包中不能有相同的类名,但是在不同的包中可以有相同的类名).
8.1:声明包:package 包名;
8.2:导入包:import 包名.类名;//导入指定类,这个类所有属性和方法在这个类中可用
import 包名.*;//导入这个包中所有类.
3.3:包命名:域名.公司/组织名.项目名.架构名.eg:com.qf.day8.demo1
包名必须全小写,包名不能用数字开头可以包含数字,包名不能包含特殊字符.