首页 > 其他分享 >动手动脑

动手动脑

时间:2022-10-10 20:23:56浏览次数:47  
标签:初始化 变量 动脑 System 动手 println public out

引用类型 vs 原始数据类型

“引用”一个对象的变量称为“引用类型”的变量,有时又简称为“对象变量”。例:MyClass obj = new MyClass();

诸如int,float之类的变量称为“原始数据类型”的变量。例:int value=100;

变量与内存分配

当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null。例:MyClass obj=null,此时obj为null。

定义一个原始类型的变量时,会马上给其分配内存。例:int value=100,此时value为100。
对于原始数据类型的变量(比如int),可以直接使用“==”判断两变量值是否相等?

测试两个对象变量
例:public class Test {
       public static void main(String[] args) {
             Foo obj1=new Foo();
             Foo obj2=new Foo();
             System.out.println(obj1==obj2);
       }

}
class Foo{
       int value=100;
}
运行结果:

 

 测试两个原始数据类型的变量
public class Test {
        public static void main(String[] args) {
               int value1=100;
               int value2=100;
              System.out.println(value1==value2);
       }

}
运行结果:

 由上述实践得知:当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等。

         当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。

            引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。

 

 报错The constructor Test.Foo() is undefined 翻译: 构造函数 Test.Foo()未定义。
结论:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

多构造函数

同一个类可以有多个构造函数,多个构造函数之间通过参数来区分。这是方法重载的一个实例。 构造函数之间可以相互调用。

 

 

 

 运行结果:

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

运行下面的代码,观察输出结果,总结出“静态初始化块的执行顺序”。

 1 class Root
 2 {
 3     static
 4     {
 5         System.out.println("Root的静态初始化块");
 6     }
 7     {
 8         System.out.println("Root的普通初始化块");
 9     }
10     public Root()
11     {
12         System.out.println("Root的无参数的构造器");
13     }
14 }
15 class Mid extends Root
16 {
17     static
18     {
19         System.out.println("Mid的静态初始化块");
20     }
21     {
22         System.out.println("Mid的普通初始化块");
23     }
24     public Mid()
25     {
26         System.out.println("Mid的无参数的构造器");
27     }
28     public Mid(String msg)
29     {
30         //通过this调用同一类中重载的构造器
31         this();
32         System.out.println("Mid的带参数构造器,其参数值:" + msg);
33     }
34 }
35 class Leaf extends Mid
36 {
37     static
38     {
39         System.out.println("Leaf的静态初始化块");
40     }
41     {
42         System.out.println("Leaf的普通初始化块");
43     }    
44     public Leaf()
45     {
46         //通过super调用父类中有一个字符串参数的构造器
47         super("Java初始化顺序演示");
48         System.out.println("执行Leaf的构造器");
49     }
50 
51 }
52 
53 public class TestStaticInitializeBlock
54 {
55     public static void main(String[] args) 
56     {
57         new Leaf();
58         
59 
60     }
61 }

运行结果:

结论:静态初始化块只执行一次。

     创建子类型的对象时,也会导致父类型的静态初始化块的执行。

 

 




 

 

 

 


标签:初始化,变量,动脑,System,动手,println,public,out
From: https://www.cnblogs.com/ysk0904/p/16776898.html

相关文章

  • 动手动脑:方法覆盖
    注:方法覆盖要求子类与父类的方法一模一样,否则就是方法重载(overload)测试:1.  在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。packagetest2;classGrandp......
  • 动手实验:继承条件下的构造方法调用
    packagetest2;classGrandparent{publicGrandparent() { System.out.println("GrandParentCreated."); }publicGrandparent(String......
  • 自己动手写ls命令——Java版
    自己动手写ls命令——Java版介绍在前面的文章Linux命令系列之ls——原来最简单的ls这么复杂当中,我们仔细的介绍了关于ls命令的使用和输出结果,在本篇文章当中我们用Java代......
  • 9.30动手动脑
    对于Java字段的初始化来说,共有以下几种方法:1.类的构造函数(构造方法):当创建一个对象时,其构造函数就会自动调用。构造方法必须与类名相同,无返回值。如果程序员没有定义一......
  • 动手开发一个有用的 ABAP ALV 工具 - 查看指定用户的 ABAP 传输请求,模拟 SE10 事物码
    我们知道ABAP系统里有一个有用的工具,事物码SE10,输入用户名称,可以查看该用户在本系统上创建的传输请求(TransportRequest)列表:点击Display按钮,能看到用户名WANGJER......
  • 动手动脑01四则运算计算器
    完成一个计算器阶段1:1、定义主界面菜单,1、参数设置2、小学二年级口算题3、小学三年级口算题4、小学四年级口算题5、错题集其中参数设置包括出题个数(缺省值为30)、操作......
  • 动手动脑
    一.Java字段初始化的规律。1.类的构造方法(1)“构造方法”,也称为“构造函数”,当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。(2)如果类没......
  • 动手动脑--静态方法中只允许访问静态数据,如何在静态方法中访问类的实例成员
    package test.two; public class jingtaihanshu{       int x=3;static int  y =4;public static void Method()//静态方法    {  ......
  • 动手动脑--运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块
    class Root{static{System.out.println("Root的静态初始化块");}{System.out.println("Root的普通初始化块");}public Root(){System.out.println("Root的无参数的构造器......
  • 动手动脑--观察结果
    1.以下代码无法通过编译,哪里出错了?原因:因为构造函数Foo()没有进行定义,如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。截图:2..请依据代码的输出结......