静态 常量 同步



作业1:static修饰类?特点

作业2:static final 操作

作业3:同步关键字

 

 

作业1:

 当我用修饰一个类的时候,它会报错,显示让我把static 去掉

 

当我去掉后就不报错了

 

当我尝试在类里面写时发现没有报错的

 

我想是不是public的原因,是不是写static就不能写public :

 

 

以上的结果说明我的假想是错误的。

 

总结:java中的类是可以是static。(静态的实例对象,静态方法,静态块,静态内部类)只有内部类可以为静态的。

静态内部类与非静态内部类的区别:

  1. 内部静态类不需要有指向外部类的引用。但非静态内部类需要持有对外部类的引用。

  2. 非静态内部类能访问外部类的静态和非静态成员。静态类不能访问外部类的非静态成员。他只能访问外部类的静态成员    

  3. 一个非静态内部类不能脱离外部类实体被创建,一个非静态内部类可以访问外部类的数据和方法,因为他就在外部类里面。

    对比     静态对象 非静态对象

    拥有属性 是类共同拥有的 是类各个对象自己独立拥有的

    内存分配 内存空间上固定的 空间在各个附属类里面分配

    分配数序 先分配静态对象的空间再分配非静态对象的空间

    作业2:

      static操作

    1>静态代码块

    他用于初始化类,为累的属性初始化,每个静态代码块只会执行一次。由于JVM在加载类的时候会执行静态代码块,所以静态代码块会先于主方法执行。

    如果类中包含多个静态代码块,那么将按照先定义的代码先执行,后定义的代码后执行

  1. 静态代码块不能存在于任何方法体内

  2. 静态代码块不能直接访问静态实例对象和实例方法,需要类的实例对象来访问

     

     

    2>静态变量

    static关键字修饰的变量,称为静态变量或者类变量。没有被他修饰的叫实例变量。

    静态变量与实例变量的区别:

    1:在语法定义上的区别:静态变量前要加static关键字,实例变量不加。

    2:在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也成为类变量,只要程序加载了字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例对象必须创建对象后才可以通过这个对来使用,静态变量则可以直接使用类名来引用。

     

    3>静态方法

    静态方法的唯一作用是随着类的加载(而不是随着对象的产生)

     

    静态方法个实例方法的区别:

    1>在外部调用静态方法时,可以使用“类名.方法名”的方式,也可以使用“对象名.方法名”的方式。而实例方法只有后面的这种,也就是说,调用静态方法可以不用创建对象。

    2>静态方法在访问本类的成员的时候,只允许访问静态成员(静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法没有这个限制。

     

     

     

    Final操作

    变量

    final关键字修饰成员变量,意为不可改变。

    final修饰成员变量,两种方式初始化。

    声明的同时初始化

    构造函数中初始化

    final关键字也可以修饰局部变量,使用之前初始化即可

    方法:

    Final 关键字修饰的方法不可以被重写

    使一个方法不被重写的意义在于:防止子类在定义新方法时造成的“不轻易”重写

    类:

    final关键字修饰的类不可以被继承

    JDK中的一些基础类库被定义为final:String,Math,Integer,Double等等

    使一个类不能被继承的意义在于:可以保护类不被继承修改,可以控制滥用继承对系统造成的伤害

    Static final常量

      被他修饰的成员成为常量,必须声明同时初始化,不可以被改变。

     

     

     

     

     

     

     

    作业3

    同步关键字:synchronized

    java中同步关键字synchronized是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized代码既可以加在一段代码上,也可以加在方法上。

    Static synchronized方法,static 方法可以直接类名加方法名调用,方法中无法使用this,所以他锁的不是this,而是类的class对象,所以static synchronized 方法也相当于全局锁,相当于锁住了代码段。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值