java学习笔记之面向对象static,final关键字
一.static关键字
1.概述:
static静态的,被static修饰的成员属于类,不属于单个对象,被所有对象所共享,存在静态区中,静态的成员优先于对象加载到内存中。
2.statc修饰成员的使用方式:(被static修饰的成员变量有默认值)
/* 1.可以通过对象直接使用,不推荐使用 2.通过类名调用静态成员 类名.静态成员变量 类名.静态成员方法 */
3.static的特点
/* 1.在同一个类中,静态成员只能访问静态成员,非静态成员可以访问静态成员跟非静态成员。原因:静态成员优先加载到内存中,而非静态的成员只有在创建对象时才会加载到内存中。 2.main方法为静态成员方法,仅仅作为程序的执行入口,不属于某个类,可以定义到任意类中。 */
4.静态代码块:
代码块:指被{}包裹起来的代码区域
/* 1.局部代码块: 定义在局部位置的(方法内)的代码块,主要作用是改变变量的作用域; 2.构造代码块: 定义在成员位置(类中方法外)的代码块,构造代码块属于每一个对象,每创建一次对象,就会执行一次。优先于构造方法执行; 作用:《1》给成员变量赋值《2》将构造方法中的共性代码抽取出来,提高代码的复用性 3.静态代码块: 定义在成员位置的(类中方法外)的代码块,被static修饰。静态代码块属于类,不属于对象,终身只执行一次,最先执行(静态优先于非静态,优先于对象);作用:《1》给静态变量赋值《2》应用于项目的初始化 */
5.static多态调用中,编译跟运行;
编译:看父类,父类有编译成功,父类没有编译失败;
运行:
成员变量:都看父类
成员方法:非静态运行子类重写
静态运行父类的静态方法(和子类没有关系,多态表现的是父类的形态);
原因:静态方法属于类,不属于对象,静态方法更没有重写这一说
对象的多态性,静态和对象无关,父类的引用.静态方法,调用的是父类的静态方法
二.final关键字
1.理解:
final最终的,不能更改的;
2.final特点:
/* 1. final修饰类时:被final修饰的类不能被继承,其他不变,可以继承其他类,也叫太监类; 2. 修饰成员方法时:该成员方法是一个最终方法,不能被子类重写,可以被继承使用; 3. 修饰变量时:被修饰的变量是一个常量,其中值不能发生改变,一次赋值终生不变,局部变量只有final一个修饰符; 4. 修饰成员变量时:是一个常量,其值只能赋值一次,必须在创建对象之前赋值,被修饰的成员变量必须显示赋值:《1》定义的时候显示赋值《2》使用构造代码块《3》使用构造方法 */
三.四种权限修饰符
1.private:私有的,仅同类访问
2.默认:就是不写修饰符,相同包下访问
3.protected:受保护的;相同包或者不同包下的子类访问
4.public:公共的;同一个项目下
四.内部类
1.内部类概念:
定义在类内部的类
2.内部类的分类:
(1)局部内部类:定义在其他类方法中的类;
(2)成员内部类:定义在成员位置的类;
3.成员内部类的使用:
(1).定义格式
修饰符 class 外部类名{
修饰符 class 内部类名{
成员变量;
成员方法
}
}
1 //定义外部类Person 2 public class Person { 3 //定义一个成员内部类Hert 4 public class Hert{ 5 6 } 7 8 }
(2)成员内部类的使用格式:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
变量名.成员变量
变量名.成员方法
(3)成员内部类和外部类成员变量同名访问问题:
4.局部内部类的使用
(1).格式:
修饰符 class 外部类名{
修饰符 返回值 方法名(){
(final) class 内部类名{
成员变量
成员方法;
}
//使用
内部类名 变量名 = new 内部类名();
变量名.成员变量;
变量名.成员方法;
}
}
(2)局部内部类的使用方式:
局部内部类和局部变量一样,作用域在方法中,方法弹栈就失效了,所以定义完了局部内部类需要在方法中使用;
五.匿名内部类
1.概念:没有名字的局部内部类
2.作用:简化代码,把创建子类/实现类,重写方法,创建子类/实现类对象合成一步;
3.格式:
1 new 父类/接口(){ 2 重写父类或者接口的方法 3 };