Java基础6
Java基础6
DouDouLee 发表于2年前
Java基础6
  • 发表于 2年前
  • 阅读 35
  • 收藏 0
  • 点赞 2
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 变量名命名规则、final/finally/finalize、static关键字

1、变量名命名规则

只能由字母(a-z,A-Z)、数字(0-9)、下划线(_)和$组成。且标识符的第一个字符只能为字母下划线和$,不能是数字。

2、final/finally/finalize

1)final用于声明属性、方法和类,表示属性不可变、方法不可覆盖、类不可被继承。

final变量:引用不可变,只能指向初始时指向的那个对象

public class k {
 public static void main(String[] args){
  final StringBuffer s = new StringBuffer("hello");
  
  s = new StringBuffer("Hi");//编译期错误
  
}
}

final方法:不允许子类重写这个方法,子类可以使用这个方法。

final类:不能被继承,其所有方法都不能被重写。一个类不能既是abstract又是final的。

2)finally

是异常处理的一部分,只能用在try-catch语句中,经常用在需要释放资源的情况下。

3)finalize

是Object类的一个方法,在垃圾回收器执行时会调用被回收对象的finalize()方法。

public class FinalizeD {
 @Override
 protected void finalize(){
  System.out.println("finalize excute");
 }
 public static void main(String[] args){
  FinalizeD f = new FinalizeD ();
  
  /*finalize()被调用的条件, (1)类未被调用(因此被回收)(置null), (2)调用System.gc(). */
  
  f = null;
  System.gc();
 }
}/*Output:
finalize excute*/

3、static关键字

主要有两种作用:1)为某特定的数据类型或对象分配单一的存储空间。2)在不创建对象的情况下就可以用类直接调用static的方法或使用类的属性。

1)static成员变量

在内存中只有一个复制,即所有实例都指向同一个内存地址。只要其所在的类被加载这个static 变量就会被分配空间,就可以被使用:类.static变量、对象.static变量。不能在成员函数内部定义static 变量。

2)static 成员方法

是类的方法,不需要创建对象直接通过类.方法名()就可以使用,而非static方法只有通过创建对象调用。

static方法中不能使用this和super关键字(this和super属于对象的范畴,而static成员变量、方法是属于类的。this代表对本类对象的引用,指向本类已经创建的对象;而super代表对父类对象的引用,指向父类对象;静态优先于对象存在,因此静态加载后,当时需要使用的类的对象还不一定存在。还有, 静态方法是存放在内存中的数据段里,this和super调用的是堆空间里的应用对象不能调用数据段区域里的数据,因此静态方法中不能用this和super关键字。)

static的一个重要的用途是实现单例模式

package Four;

//单例模式,懒汉式:在第一次调用的时候实例化自己。构造函数必须为private
//饿汉式:在定义时就实例化自己

public class SingletonPattern {

 private SingletonPattern(){}//避免类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过
 getInstance()方法访问。
 
 //private static SingletonPattern uniqueInstance = new SingletonPattern();
 //单例模式的一个特点是该类只有一个实例,为实现这一功能必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法(由于构造对象为private,外界无法直接创建这个类的对象,只能通过该类提供的方法来获取类的对象,要想达到这样的目的只能把创建对象的方法声明为static)
 
  private static SingletonPattern uniqueInstance = null;
 
  //线程安全
 
 public static  synchronized SingletonPattern getInstance(){
  if(uniqueInstance == null)
   uniqueInstance = new SingletonPattern();
  
  return uniqueInstance;
 }
 
 public static void main(String[] args){
  SingletonPattern s1= SingletonPattern.getInstance();
  SingletonPattern s2= SingletonPattern.getInstance();
  
  System.out.println(s1);
  System.out.println(s2);
 }

}/*创建的是同一个实例

Out:
Four.SingletonPattern@19e0bfd
Four.SingletonPattern@19e0bfd*/
/*
 * 饿汉式
class Singleton {
  private static Singleton instance=new Singleton();
  private Singleton(){}
  static Singleton getInstance() {
      return instance;
  }
}
懒汉式
class Singleton {
  private static Singleton instance=null;
  private Singleton(){}
  static Singleton getInstance() {
      if(instance==null)
      instance=new Singleton();
      return instance;
  }
}*/

3)static代码块

JVM在加载类时执行static代码块,static代码块只会被执行一次。

public class StaticBlock{
 private static int a;
 static{
  StaticBlock.a = 1;
  System.out.println(a);
 }
 public static void main(String[] args){}
}

4)static内部类

不依赖于外部类实例对象而被实例化,而通常的内部类要在外部类实例化后才能实例化,static内部类不能与外部类有相同的名字,只能访问外部类中的static成员和static方法。

public class Outer{
 static int n = 9;
 static class Inner{
  void f(){
   System.out.println(n);
  }
 }
 public static void main(String[] args){
 
  Outer.Inner nest = new Outer.Inner(); //不依赖外部对象实例化
  
  nest.f();
 }
}

static final的变量一旦赋值就不可修改,通过类名可以访问;static final方法不可覆盖,通过类名可访问。

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 6
博文 91
码字总数 45242
×
DouDouLee
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: