关于本次课堂代码的练习
(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();} }
- 静态初始化块的优先级最高,也就是最先执行,并且仅在类第一次被加载时执行;
- 非静态初始化块和构造函数后执行,并且在每次生成对象时执行一次;
- 非静态初始化块的代码会在类构造函数之前执行。因此若要使用,应当养成把初始化块写在构造函数之前的习惯,便于调试;
- 静态初始化块既可以用于初始化静态成员变量,也可以执行初始化代码;
- 非静态初始化块可以针对多个重载构造函数进行代码复用。
(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
关于本次课堂代码的练习相关推荐
- html语义化练习易牛课堂代码
html <body> <header> <!-- 导航 --> <nav> <a href="#">首页</a& ...
- 马士兵Python基础版2020教程P1-P57 PPT笔记+课堂代码
主要记录在看网课过程中的ppt重点内容和实例代码 目录 02 Python的自述 03 安装开发环境 05 输出函数print 06 转义字符与原字符 08 标识符和保留字 09 变量的定义和使用 1 ...
- 10.27函数课堂代码
#include<stdio.h> #include<string.h> #include<math.h> #include<time.h>int ma ...
- Android——数据存储(课堂代码整理:SharedPreferences存储和手机内部文件存储)...
layout文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmln ...
- Android应用开发-所有课堂代码
Android基础---学习历程[上课用到的资源---学期!汇总!整理][课本源码.课后习题答案.上课课件与录播] 链接:https://pan.baidu.com/s/1CqoRpf-rMZ2vQf ...
- 马士兵Python基础版2020教程P58-P96 PPT笔记+课堂代码
目录 57 字典 59 字典的创建 60 字典元素的获取 61 字典增删改 62 获取字典试图 63 字典元素遍历 64 字典的特点 65 字典生成式 66 元组 67 元组的创建 68 为什么元组是 ...
- C++课堂代码(笔记)
本篇为以前上课笔记,直接从做好的word粘贴而来,并未有格式修改. 面向对象基本 构造函数 复制构造函数 静态数据 Const 浅拷贝与深拷贝 动态数组的封装 ...
- JAVA首次课堂测试总结
暑期生活已经结束,新的学期也已经开始,而暑期放假之前约定的JAVA首次课堂测试也如期的到来,本次测试真的可以学到和多东西,也有很多感想. 首先体会最深的就是系主任所说的软件工程不是那么好学的,真的需要 ...
- 如何从课堂与教学内容两方面提高培训效率------张孝祥
要是老师都有张孝祥老师那么敬业,那么认真就好了,看了很多张老师的视频教程,受益匪浅,特地转来一篇文章与大家分享.原文如下: 如何从课堂与教学内容两方面提高培训效率 新一篇: ...
最新文章
- IMI装系统装到一半出错?
- 利用Cobbler批量布署CentOS
- Spring----最小化Spring配置
- 有人说学了C语言,两天就能学会Java,两个星期就可以找工作?
- [LeetCode][JavaScript]Palindrome Linked List
- 插件开发之360 DroidPlugin源码分析(四)Activity预注册占坑
- PAIP.提升安全性----COOKIE绑定IP与城市与运营商
- c语言中实现字符串的大小的比较_C语言 | 函数实现比大小
- location.href参数丢失
- python学习手册笔记
- 用大白话谈谈XSS与CSRF
- v-charts使用
- 油猴-今日头条去广告脚本
- Gmail使用别名和googlemail.com将邮箱变为多账号
- 【ERROR】java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
- 中金环境携手海通安恒,启动SAP二期项目
- Android java.lang.IllegalStateException: Underflow in restore - more restores than saves
- 《算法竞赛入门经典》Chap3
- 机器学习--模型参数优化及scoring可选参数
- 推荐25个上网必备的经典网站
热门文章
- 支付宝小程序公测!教程新鲜出炉
- 政务大数据的东莞实践 智慧政府建设步伐加快
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- VB 和Flex交互总结
- Win32 设备管理(2)
- python2 urllib2_python2.7 urllib和urllib2
- Spring高级之注解@Bean详解(超详细)
- design and analysis of computational and physical experiments
- 判断Windows操作系统位数的方法
- market1501 data_manager.py