java学习笔记之面向对象static,final关键字

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 };

  

原文地址:https://www.cnblogs.com/xuzhaocai/p/8076465.html