Java不会的13-static, 内部类,包,权限修饰符,代码块

1.final定义
  (1)为什么出现,继承中,不想让子类修改自己的方法或者变量。
  final是个修饰符,除了构造方法以外的地方,都可以修饰。
       可以修饰类,类的成员,局部变量。
2.造函数为何不能用abstract, static, final修饰?
不同于方法,构造器不能是abstract, static, final的.


(1).构造器不是通过继承得到的,所以没有必要把它声明为final的。


(2).同理,一个抽象的构造器将永远不会被实现,所以它也不能声明为abstract的。


(3).构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。


3.final类的特点:
  (1)final修饰类不可以被继承,但是可以继承其它类。比如String类。
  (2)final修饰的方法可以被继承,但是不可以被覆盖。
  (3)final修饰的变量被称为常量,这些常量只能赋值一次。
         final int i = 20;
  (4)final修饰的引用变量,保存的内存你地址,终身不变。   
   (5) final修饰成员变量的时候,保存的是手动赋的值,不是默认值。
       eg.final int age = 1;//保存的是1,不是默认的0。
 4.成员变量的赋值,有2中实现方式,一种是定义的时候,直接 =赋值
   另一种采用构造方法赋值
      class Person{
   eg. final int age;
       public Person(int age){this.age = age}
5. setXXX方法,创建对象之后的事情,不能为final修饰的成员赋值。
6. static 关键字
   (1)理解:需要共享的数据用static。比如学生和学校,学生有自己的姓名,但是校名共享一个,校名可以用static修饰。
   (2)被静态修饰的成员,可以被类名字直接调用。
7.静态中不能调用非静态。为什么?
  静态内容是优先于对象存在,只能访问静态,不能使用this/super.
  形象比喻:静态==先人,秦始皇   非静态==后人。   秦始皇不能访问到后人,但是后人,可以挖秦始皇的墓。
  eg.public class Test{
       String name;
       int age;
  
       public static void function(){
       System.out.println(name+age);//报错,
}


}


8.static 静态的使用场景
  (1)可以修饰变量、方法。
  (2)将共性的数据定义为静态的成员变量或方法
  (3)没用过非静态成员的,就应该加上static
       eg.
     private static String name;
    private static int age;
     private char sex;
     public static int getSum(int a, int b, int c){//没用过非静态成员,加上static
     return a+b+c;
}
9.定义静态常量
   (1)静态常量名称全部大写,两个字母之间用_连接
       eg. public static final String COMPANY_NAME = "苹果";
     (2)注意:接口中的每个成员变量都默认使用public static final修饰
                 所有接口中的成员变量已是静态变量,由于接口没有构造方法,


(3)接口为什么没有构造方法
A. 构造方法用于初始化成员变量,但是接口成员变量是常量,无需修改。接口是一种规范,被调用时,主要关注的是里边的方法,而方法是不需要初始化的,
B. 类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序
C. 接口中的方法没有方法体,没法进行初始化,所有不用构造函数。


   抽象类为什么有构造方法?
   (1)抽象类中的构造方法可以不是抽象的,可以有方法体,可以进行初始化。
10.匿名对象
     (1)匿名对象只能使用1次。


11.内部类
    (1)定义:写在其它类的内部的类。
    (2)可以写在其它类的成员位置和局部位置。//局部位置,指可以写在方法里面。
      eg.class 汽车{
          class 发动机{//内部类
       }
}


   (3)内部类分成员内部类和局部内部类
       成员内部类:可以使用成员修饰符,public static,.....
                          也是个类,可以继承,可以实现接口
      编译出来的字节码文件格式: Outer$Inner.class //内部类
                                                  Outer.class//外部类


   (4)调用规则:内部类可以调用外部类的成员(包括private)
                            外部类要使用内部类的成员,必须建立内部类对象。


12.内部类的调用格式
     依靠外部类对象,找到内部类,通过内部类对象,调用内部类的方法
     格式:
           外部类名.内部类名 变量 = new 外部类对象().new内部类对象();
           变量.内部类方法();
     eg.  Outer.Inner in = new Outer().new Inner();
            in.inner();


13.匿名内部类
    (1)是局部内部类的一种
    (2)前提是继承一个类,或者实现一个接口
     (3)格式:
       new 接口或者父类(){


      };
     //从new开始,到分号结束,创建了接口的实现类的对象。
  eg. new Smoking(){
          public void smoking(){//重写父类方法
                   System.out.println("人在抽烟“);
    }
    }.smoking();




14.导包注意事项:
    (1)导包,得引入该类真正的文件夹,比如:
         Lock类:java/util/concurrent.locks.*;  //在这个目录下。
      
import java.util.*;
    
public class Test{
     Lock lock = new Lock();//会报错,说没导入正确的包。

}


15.变量被声明成了final,必须赋值,否则报错?
    不是的,分两种情况。
  (1)定义的是成员变量,必须赋值,否则编译器报错。因为编译器初始化这个类的时候,发现一个不可被修改的变量没有值,编译器必然报错。
  (2)在方法种定义了final的变量,可以先不赋值,但是如果要使用这个final变量,必须要初始化。因为类初始化的时候,如果没有调用这个方法,是不是调用这个方法里的final变量的,所有先不赋值,编译器不报错。


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值