(1)对象变量的判等

public class demo01 {static class Foo{int value = 100;}public static void main(String[] args) {Foo obj1 = new Foo();Foo obj2 = new Foo();System.out.println(obj1 == obj2);}
}

如代码可见,obj1和obj2是否为等?

答案如下

为什么会出现false呢?原因在于,当你将“==”作用于引用类型变量时,比较的是这两个变量是否引用于同一对象。而引用代表地址,所以本质上上述代码比较的是地址值,所以出现false也是合情合理的了。

(2)自定义构造方法和默认构造方法

public class demo01 {static class Foo{int value;public Foo(int initvalue) {value = initvalue;}}public static void main(String[] args) {Foo obj = new Foo();}
}

如图代码。

此代码是无法编译的,因为编译器会报错。错误点在于:

在没有手动输入一个类的构造方法时,编译器会自动提供一个无参的构造方法。而上述代码很明显,编程者手动写了一个构造方法Foo(int initvalue),这是一个有参构造方法,而编译器检测到这个方法后,就不再提供无参构造方法。所以,当编程者实例化无参构造方法时,系统就会报错了。解决方案如下:

public class demo01 {static class Foo{int value;public Foo(int initvalue) {value = initvalue;}}public static void main(String[] args) {int initvalue = 0;Foo obj = new Foo(initvalue);}
}

这样的程序是可执行的。

(3)关于类的初始化块

public class demo01 {public static void main(String[] args) {InitializeBlockClass obj=new InitializeBlockClass();System.out.println(obj.field);obj=new InitializeBlockClass(300);System.out.println(obj.field);}}
class InitializeBlockClass{//下面这句在初始化块之前与之后,会影响到field字段的初始值//public int field=100;
    {field=200;}public int field=100;public InitializeBlockClass(int value){this.field=value;}public InitializeBlockClass(){}
}

如图代码

当一个类中如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?

上述代码运行结果可见:

所以,根据这道题结论可知:

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

2、执行类的构造函数。

(4)静态初始化块的执行顺序

package Demo01;class Root
{static{System.out.println("Root的静态初始化块");}{System.out.println("Root的普通初始化块");}public Root(){System.out.println("Root的无参数的构造器");}
}
class Mid extends Root
{static{System.out.println("Mid的静态初始化块");}{System.out.println("Mid的普通初始化块");}public Mid(){System.out.println("Mid的无参数的构造器");}public Mid(String msg){//通过this调用同一类中重载的构造器this();System.out.println("Mid的带参数构造器,其参数值:" + msg);}
}
class Leaf extends Mid
{static{System.out.println("Leaf的静态初始化块");}{System.out.println("Leaf的普通初始化块");}    public Leaf(){//通过super调用父类中有一个字符串参数的构造器super("Java初始化顺序演示");System.out.println("执行Leaf的构造器");}}
public class demo01{public static void main(String[] args) {new Leaf();}
}

  1. 静态初始化块的优先级最高,也就是最先执行,并且仅在类第一次被加载时执行;
  2. 非静态初始化块和构造函数后执行,并且在每次生成对象时执行一次;
  3. 非静态初始化块的代码会在类构造函数之前执行。因此若要使用,应当养成把初始化块写在构造函数之前的习惯,便于调试;
  4. 静态初始化块既可以用于初始化静态成员变量,也可以执行初始化代码;
  5. 非静态初始化块可以针对多个重载构造函数进行代码复用。

(5)在静态方法中访问类的实例成员

package Demo01;public class demo01 {int x = 3;//类的实例变量,初始化值为3static int  y = 4;//类的静态变量,初始化值为4public static void method()//静态方法
      {   System.out.println("实例变量x = " + new demo01().x);//在静态方法中访问类的实例变量需首先进行类的实例化System.out.println("静态变量y = " + y);//在静态方法中可直接访问类的静态变量
      }public static void main(String[] args) {demo01.method();demo01 ex = new demo01();System.out.println("x = " + ex.x);}
}

结果:

转载于:https://www.cnblogs.com/YXSZ/p/9824575.html

关于本次课堂代码的练习相关推荐

  1. html语义化练习易牛课堂代码

    html <body> <header> <!-- 导航 --> <nav> <a href="#">首页</a& ...

  2. 马士兵Python基础版2020教程P1-P57 PPT笔记+课堂代码

    主要记录在看网课过程中的ppt重点内容和实例代码 目录 02 Python的自述 03 安装开发环境 05 输出函数print 06 转义字符与原字符 08 标识符和保留字 09 变量的定义和使用 1 ...

  3. 10.27函数课堂代码

    #include<stdio.h> #include<string.h> #include<math.h> #include<time.h>int ma ...

  4. Android——数据存储(课堂代码整理:SharedPreferences存储和手机内部文件存储)...

    layout文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmln ...

  5. Android应用开发-所有课堂代码

    Android基础---学习历程[上课用到的资源---学期!汇总!整理][课本源码.课后习题答案.上课课件与录播] 链接:https://pan.baidu.com/s/1CqoRpf-rMZ2vQf ...

  6. 马士兵Python基础版2020教程P58-P96 PPT笔记+课堂代码

    目录 57 字典 59 字典的创建 60 字典元素的获取 61 字典增删改 62 获取字典试图 63 字典元素遍历 64 字典的特点 65 字典生成式 66 元组 67 元组的创建 68 为什么元组是 ...

  7. C++课堂代码(笔记)

    本篇为以前上课笔记,直接从做好的word粘贴而来,并未有格式修改. ​​​​​​​​​​​​​​​​​​​​面向对象基本 构造函数 复制构造函数 静态数据 Const 浅拷贝与深拷贝 动态数组的封装 ...

  8. JAVA首次课堂测试总结

    暑期生活已经结束,新的学期也已经开始,而暑期放假之前约定的JAVA首次课堂测试也如期的到来,本次测试真的可以学到和多东西,也有很多感想. 首先体会最深的就是系主任所说的软件工程不是那么好学的,真的需要 ...

  9. 如何从课堂与教学内容两方面提高培训效率------张孝祥

    要是老师都有张孝祥老师那么敬业,那么认真就好了,看了很多张老师的视频教程,受益匪浅,特地转来一篇文章与大家分享.原文如下:               如何从课堂与教学内容两方面提高培训效率 新一篇: ...

最新文章

  1. IMI装系统装到一半出错?
  2. 利用Cobbler批量布署CentOS
  3. Spring----最小化Spring配置
  4. 有人说学了C语言,两天就能学会Java,两个星期就可以找工作?
  5. [LeetCode][JavaScript]Palindrome Linked List
  6. 插件开发之360 DroidPlugin源码分析(四)Activity预注册占坑
  7. PAIP.提升安全性----COOKIE绑定IP与城市与运营商
  8. c语言中实现字符串的大小的比较_C语言 | 函数实现比大小
  9. location.href参数丢失
  10. python学习手册笔记
  11. 用大白话谈谈XSS与CSRF
  12. v-charts使用
  13. 油猴-今日头条去广告脚本
  14. Gmail使用别名和googlemail.com将邮箱变为多账号
  15. 【ERROR】java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
  16. 中金环境携手海通安恒,启动SAP二期项目
  17. Android java.lang.IllegalStateException: Underflow in restore - more restores than saves
  18. 《算法竞赛入门经典》Chap3
  19. 机器学习--模型参数优化及scoring可选参数
  20. 推荐25个上网必备的经典网站

热门文章

  1. 支付宝小程序公测!教程新鲜出炉
  2. 政务大数据的东莞实践 智慧政府建设步伐加快
  3. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  4. VB 和Flex交互总结
  5. Win32 设备管理(2)
  6. python2 urllib2_python2.7 urllib和urllib2
  7. Spring高级之注解@Bean详解(超详细)
  8. design and analysis of computational and physical experiments
  9. 判断Windows操作系统位数的方法
  10. market1501 data_manager.py