Java 类与对象

一、构造方法

 1 public class Text {
 2     public static void main(String[] args) {
 3         Foo obj1= new Foo(5);
 4         System.out.println(obj1.value);
 5     }
 6 }
 7 class Foo{
 8     int value;
 9     Foo(int initValue){
10         value = initValue;
11     }
12 }

运行结果:

  若主函数中改为:Foo obj1=new Foo();则程序会报错。因为,如果类提供了一个自定义的构造方法,将导致系统不再提供默认的构造方法。

  并且,一个类中可以有多个构造函数,构造函数之间可以互相调用。

二、Java字段初始化

 1 public class Text {
 2     public static void main(String[] args) {
 3         InitializeBlockClass obj=new InitializeBlockClass();
 4         System.out.println(obj.field);
 5         
 6         obj=new InitializeBlockClass(300);
 7         System.out.println(obj.field);
 8     }
 9 }
10 class InitializeBlockClass{
11     {
12         field=200;
13     }
14     public int field=100;
15     public InitializeBlockClass(int value){
16         this.field=value;
17     }
18     public InitializeBlockClass(){}
19 }

运行结果:

  Java字段初始化规律系统会按顺序对Java字段进行初始化,如果有好几个方法都对同一个变量进行了初始化。Java会将最后一次的初始化结果赋给该变量。

三、静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

 1 public class Text{
 2     int a = 2;//实例变量
 3     static int  b = 3;//类的静态变量
 4     public static void variable(){   
 5         System.out.println("实例变量a = " + new Text().a);
 6         //在静态方法中访问类的实例变量需首先进行类的实例化
 7         
 8         System.out.println("静态变量b = " + b);
 9         //在静态方法中可直接访问类的静态变量
10     }
11      public static void main(String[] args) {
12          Text.variable();
13          Text test = new Text();
14          System.out.println("结果是 :实例变量 = " + test.a);//访问实例成员
15     }
16  }

运行结果:

  static修饰的在加载时是先于非静态的加载,也就是如果在static中如果调用了非静态的方法或变量会报错,因为此时非静态的方法和变量还不存在(可以这样理解) 。
  在静态方法中访问类的实例变量需首先进行类的实例化,除了加static修饰,还可以先new创建一个对象,通过对象去调用成员方法和变量,如new A().test()。

四、请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象。

  1、创建一个类T;

  2、定义一个静态整型变量number,使其记录创建对象个数;

  3、定义构造函数,每当创建一个对象时,令number++;

  4、在程序中定义一个函数showNum(),令其输出计量值number,即对象创建个数。 

 1 public class Text{
 2     public static void main(String[] args){
 3         T obj=new T();
 4         obj.showNum();
 5         obj=new T();
 6         obj.showNum();
 7         obj=new T();
 8         obj.showNum();
 9     }
10  }
11 class T{
12     public static int number=0;
13     public T(){
14         number++;
15     }
16     public void showNum(){
17         System.out.println("第"+number+"个实例化对象!");
18     }
19 }

运行结果:

 

  

原文地址:https://www.cnblogs.com/yifengyifeng/p/5982515.html