您的位置:首页 > 其它

静态 常量 同步

2017-05-15 23:04 92 查看

作业1:static修饰类?特点
作业2:static final 操作
作业3:同步关键字
 
 
作业1:
 当我用修饰一个类的时候,它会报错,显示让我把static 去掉
 
当我去掉后就不报错了
 
当我尝试在类里面写时发现没有报错的
 
我想是不是public的原因,是不是写static就不能写public :
 
 
以上的结果说明我的假想是错误的。
 
总结:java中的类是可以是static。(静态的实例对象,静态方法,静态块,静态内部类)只有内部类可以为静态的。
静态内部类与非静态内部类的区别:

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

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

一个非静态内部类不能脱离外部类实体被创建,一个非静态内部类可以访问外部类的数据和方法,因为他就在外部类里面。
对比    
静态对象
非静态对象
拥有属性
是类共同拥有的
是类各个对象自己独立拥有的
内存分配
内存空间上固定的
空间在各个附属类里面分配
分配数序
先分配静态对象的空间再分配非静态对象的空间
作业2:
  static操作
1>静态代码块
他用于初始化类,为累的属性初始化,每个静态代码块只会执行一次。由于JVM在加载类的时候会执行静态代码块,所以静态代码块会先于主方法执行。
如果类中包含多个静态代码块,那么将按照先定义的代码先执行,后定义的代码后执行

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

静态代码块不能直接访问静态实例对象和实例方法,需要类的实例对象来访问
 
 
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 方法也相当于全局锁,相当于锁住了代码段。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息