zoukankan      html  css  js  c++  java
  • 构造器

    public class Test2 {
    	/**
    	 * 创建一个类,他包含了一个在定义时就被初始化了的string域, 以及另一个通过构造器初始化了的string域,这两种的方式有何差异
    	 */
    	String st1 = new String("你好");
    	Test2() {
    
    	}
    
    	Test2(String i) {
    		this.st1 = new String("我爱你");
    	}
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    Test2 ts1=new Test2();
    System.out.println(ts1.st1);
    Test2 ts2=new Test2("我爱你");
    System.out.println(ts2.st1);
    	}
    
    }

    创建一个类,他包含了一个在定义时就被初始化了的string域, 以及另一个通过构造器初始化了的string域,这两种的方式有何差异?

    当我们创建了构造器时,系统是不会再为我们创建默认构造器的。所以如果我们还需要使用默认构造器(无参构造器)时一定需要我们自己来创建。构造函数是在对象创建时调用,它会覆盖类定义初始化的String

    此方法应根据不同的基本数据类型(作为参数列表)进行重载,根据被调用的版本,它打印出不同类型的狗吠(barking)、咆哮(howling)等信息。在测试类里编写main()方法来调用所有不同版本的方法。
    public class Dog{
    	 public static void main(String[] args) {
    	  barking();
    	  barking("汪汪汪");
    	  barking(5);
    	  howling();
    	  howling("老虎");
    	  howling("老虎",10);
    	 }
    
    	public static void barking(){
    	  System.out.println("狗吠");
    	 }
    	 
    	 public static void barking(String str){
    	  System.out.println("狗吠"+str);
    	 }
    	 
    	 public static void barking(int number){
    	  System.out.println(number+"只狗在吠");;
    	 }
    	 
    	 public static void howling(){
    	  System.out.println("咆哮");
    	 }
    	 
    	 public static void howling(String animal,int number){
    	  System.out.println(number+"只"+animal+"在咆哮");
    	 }
    	 
    	 public static void howling(String animal){
    	  System.out.println(animal+"在咆哮");
    	 }
    	}
    
    编写一个类,拥有两个静态字符串域,其中一个在第一处初始化,另一个在静态块中初始化。现在,加入一个静态方法用以打印出两个字段值。请证明它们都会被使用之前完成初始化动作
    public class Test5 {
    	String str = new String("我爱你");
    	Test5(String str) {
    		System.out.print(str);
    	}
    
    	static void print() {
    		Test5 test = new Test5("你好");
    		System.out.println(test.str);
    	}
    	public static void main(String[] args) {
    		print();
    	}
    }
    /**
     * 请证明加载类的动作仅发生一次,证明该类的第一个实体
     * 的创建或者对static成员的访问都有可能引起加载*/
    class A {
    	static int j = printInit("A.j initialized");
    
    	static int printInit(String s) {
    		System.out.println(s);
    		return 1;
    	}
    
    	A() {
    		System.out.println("A() constructor");
    	}
    }
    
    class B extends A {
    	static int k = printInit("B.k initialized");
    
    	B() {
    		System.out.println("B() constructor");
    	}
    }
    
    class C {
    	static int n = printInitC("C.n initialized");
    	static A a = new A();
    
    	C() {
    		System.out.println("C() constructor");
    	}
    
    	static int printInitC(String s) {
    		System.out.println(s);
    		return 1;
    	}
    }
    
    class D {
    	D() {
    		System.out.println("D() constructor");
    	}
    }
    
    public class LoadClass extends B {
    	static int i = printInit("LoadClass.i initialized");
    
    	LoadClass() {
    		System.out.println("LoadClass() constructor");
    	}
    
    	public static void main(String[] args) {
    		// accessing static main causes loading (and initialization)
    		// of A, B, & LoadClass
    		System.out.println("hi");
    		// call constructors from loaded classes:
    		LoadClass lc = new LoadClass();
    		// call to static field loads & initializes C:
    		System.out.println(C.a);
    		// call to constructor loads D:
    		//D d = new D();
    	}
    }


  • 相关阅读:
    理论+实践解析“IT治理”之模式与原则
    iOS开发如何避免安全隐患
    DBA职业发展之路:去“IOE”等挑战之下,DBA将何去何从?
    自动化测试最佳实践(一):从纺锤模型到金字塔模型
    宜信开源|手把手教你安装第一个LAIN应用
    宜信开源|数据库审核软件Themis的规则解析与部署攻略
    开源|性能优化利器:数据库审核平台Themis的选型与实践
    小老板,我300M的网,网速很慢怎么办?
    JSP、ASP、PHP Web应用程序怎么这么多P!
    难道你现在还不知道:C/S和B/S
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3217807.html
Copyright © 2011-2022 走看看