`
q700100
  • 浏览: 4816 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

关于代码块的一些疑问

    博客分类:
  • JAVA
阅读更多
1.java 中静态代码块和非静态代码块。
静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。
public class Test  {
	public static int a = 0;
	static {
		a = 10;
		System.out.println("父类的非静态代码块在执行a=" + a);
	}
	{
		a = 2;
		System.out.println("父类的非静态代码块在执行a=" + a);
	}

	public Test  () {
		this("a在父类带参构造方法中的值:" + Test.a); // 调用另外一个构造方法
		System.out.println(a);
		System.out.println("父类无参构造方法在执行a=" + a);
	}

	public Test  (String n) {
		System.out.println(n);
		System.out.println(a);
	}

	public static void main(String[] args) {
		Test  tsc = null;
		System.out.println("!!!!!!!!!!!!!!!!!!!!!");
		tsc = new Test ();
	}
}


运行结果: 
父类的非静态代码块在执行a=10
!!!!!!!!!!!!!!!!!!!!!
父类的非静态代码块在执行a=2
a在父类带参构造方法中的值:10
2
2
父类无参构造方法在执行a=2
所以:
     静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。
  且执行 顺序为静态代码块------非静态代码块----构造函数。
静态代码块  与  静态方法: 
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的.    两者的区别就是:静态代码块是自动执行的;  静态方法是被调用的时候才执行的.    作用:静态代码块可用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.

3. 应用 
     app端变更服务器地址
public class DD {
	private static String HOST = "";
	public static int IP_TYPE = 0; // 服务器类型 0, 1
	static {
		getIP();
	}
	
	public static void setType(int i) {
		IP_TYPE = i;
	}
	public static String getIP() {
		switch (IP_TYPE) {
		case 0:
			HOST = "http://192.168.1.100:8080/xxxx/xxx/";
			break;
		case 1:
			HOST = "http://112.124.22.213/xxxx/xxx/";
			break;
		default:
			break;
		}
		return HOST;
	}

}
测试函数
 
public class TEST{
	
	
public static void main(String[] args) {
	DD d1 = new DD();
	System.out.println(d1.toString());
	System.out.println(d1.getIP());
	d1.setType(1);
	System.out.println(d1.toString());
	System.out.println(d1.getIP());
}
}



结果:
DD@4fb529d6
http://192.168.1.100:8080/Xxxx/Xxx/
DD@4fb529d6
http://112.124.22.213/xxxx/xxx/

说明,一个类的静态代码块在内存中,只有一个区域,改变代码块中的内容,不过是改变其中某项的索引指向,不会重新容间资源
  类的内存空间中的地址是一样的

4. java中其他形式的代码块
一、普通代码块

  直接在一个方法中出现的{}就称为普通代码块,例子程序如下:
  public class CodeDemo01{

  public static void main(String[] args){

  //普通代码块

  {

  int x = 10;

  System.out.println("x=" + x);

  }

  int x = 100;

  System.out.println("x=" + x);

  }

  }


二、构造代码块

  直接在类中定义的没有加static关键字的代码块{}称为构造代码块,例子程序如下:

  public class CodeDemo02{

  public CodeDemo02(){

  System.out.println("========这是构造方法=========");

  }

  //这是构造代码块,而且在new对象时,构造代码块优先构造方法执行

  {

  System.out.println("=========这是构造块!=========");

  }

  public static void main(String[] args){

  new CodeDemo02();

  new CodeDemo02();

  }


    三:同步代码块
  同步代码块主要出现在多线程中。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics