static代码块,非静态代码块和static修饰的成员变量以及方法,final,接口,枚举

1:static理解
      在调用一个类的时候首先会先加载这个类中的static修饰的成员,调用这个类的时候在jvm中的方法去会开辟一个空间,这个空间分为静态区和非静态区,静态成员放在静态区,静态区的成员是公共的,别的也可以访问,当静态区的值被其他修改了以后别的在调用就是被修改后的,因为他是公共的。静态的可以被直接   类名.方法名调用,例如:Arrays.sort就是类名加方法名。
 

这是一个static修饰变量的内存的图解。

static修饰的静态方法
     调用被静态修饰方法时候在其它类中调用可以直接被调用,例如如下代码:
     

public class TestMain{
    public static void eat(){
        //TODO
}
}

class Test{
    TestMain.eat();
}

如果没有静态修饰就需要new一个对象再调用,有静态修饰的可以直接调用,静态方法不是实例,不能使用this关键字。静态方法只能操作静态方法不能操作非静态的,而非静态的成员方法既可以访问静态的也可以访问非静态的。

2:final关键字
   
  最终的意思,其实就是这个意思,被final修饰的变量就不能再改变了
    可以修饰的:
           修饰类:被final修饰类不能被继承,变成了一个太监类
           修饰方法:被final修饰的方法子类可以使用但是子类就不能重写了
           修饰变量:被fianl修饰的变量只能被复制一次不能改变他的值,但是如果一个对象被final修饰了,那么他的地址值不能改变,但是却可以改变这个对象的值。
         发现他和abstract其实是死敌,abstract是必须被重写,而final是不能修改不能重写
        

非静态代码块和静态代码块
   
   非静态代码块
               就是直接一个{ 。。。 },可以给常量初始化,第一次赋值,和if一样出了这个大括号的值就不行了
               在构造代码块中其实会先调用一个父类的无参构造,会先执行super(),只不过看不到;
他会在每一个构造方法执行之前执行这个代码块,又因为new对象其实是在调用有惨或者无参的构造方法,所以在new对象的时候会提前去调用这个代码块,如果有父类那么就会先去执行父类的无参构造然后再赋值在回来。因为构造方法默认有个一个super();
     有一个隐式三步:  

  1. super(  );
  2. 给非静态成员变量赋值
  3. 执行构造代码块(一般都是2-3,因为直接先构造代码块后给成员变量赋值,调用之前还没有定义变量,会报错,除非用this.去调用

       静态代码块就是   static{。。。。};是在类被调用以后执行静态代码块     
接口:
       接口的格式:权限修饰符interface 名称(){}           
       
类里面成员:常量,抽象方法    jdk1.8之前是只有这两个,1.8开始就有静态方法和默认方法,默认方法就是可以写方法体不用必须被重写
             常量格式:其实在写的时候可以例如:int A  = 10;    其实他是public static  final int A= 10;这个是默认加了final修饰符,他是不可变的,所以他是一个常量
            抽象方法格式:平常写的话就是:  返回值类型  方法名();实际上默认的是public   abstract   返回值类型  方法名();如果接口被实现了,那么方法必须被重写,除非是1.8开始新增的默认方法; 
 

枚举:枚举是一个类:枚举的格式:权限修饰符   enum 枚举名称{。。。}
             它的好处是可以给里面写一些值,随时哦用随时区,而且也可以定义一个这个枚举类型的数据,只能写这个枚举里面的值,其实里面的值是一个对象而且是final修饰的,所以不能更改

      
        

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值