02-类和对象-动手动脑

1.以下代码为何无法通过编译?哪出错了?

 1 public class Test {
 2     public static void main(String[] args) {
 3         Foo obji=new Foo();
 4     }
 5 }
 6 class Foo{
 7     int value;
 8     public Foo(int initValue) {
 9         value=initValue;
10     }
11 }

出错原因:在Foo的这个类中只定义了一个Foo(int)类型的构造函数,在之前的学习工程中,我们并没有接触到java的构造函数的声明过程,因此,在类中没有书写构造函数的方法的时候,编译器默认继承Object类,并在编译的时候会产生一个参数为空的构造函数,然而在定义的Foo这个类的时候,给予了一个Foo(int)类型的构造方法,所以在上述Test的调用过程中,obj1并不能够调用到new Foo()这个构造函数的方法。

2.请根据代码的输出结果,自行总结JAVA字段初始化的规律。

规律如下:

所有类的变量都默认初始化为null

数字类的原始数据类型默认初始化为0

执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

执行类的构造参数

类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”

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

 1 public class Test{
 2     int x=7;
 3     static int y=8;
 4     public static void test1(){
 5         System.out.println("非静态变量x为:"+new Test().x);
 6         System.out.println("静态变量y为:"+y);
 7     }
 8     public static void main(String[] args) {
 9         Test.test1();
10         Test i=new Test();
11         System.out.println("x="+ i.x);
12     }
13 }

运行结果如下:

非静态变量x为:7
静态变量y为:8
x=7

原文地址:https://www.cnblogs.com/Qi77/p/9825625.html