JAVA语言动手动脑问题
1.
int value=100;
前面的示例中这样定义变量
MyClass obj = new MyClass();
对象变量也可以使用“==”判断两变量值是否相等吗?
第一个执行结果为true,第二个执行结果为false,这代表对象变量还有字符串不可以用==判断两变量值是否相等,因为他们比较的是两个对象或者字符串的地址,如果声明了两个对象或者字符串那么他们的地址不会相等所以会是false。
但是如果有两个对象obj1=obj2,那么用==判定之后的结果为true,如果真的要判断两个字符串或者对象的值是否相等那么就要用equals()方法,并且equals()方法来自于继承,虽然在主方法中没有写继承,但是它继承的是父类Object类,而且是最大的父类,所以默认情况下不写继承。
3.
请总结一下,这个方法有哪些“与众不同之处”,你能列出几条?
请总结一下,这个方法有哪些“与众不同之处”,你能列出几条?
答:该方法与类名称相同,并且无返回值类型(不用void),并且如果没有声明构造方法的时候,系统会自动生成一个默认构造方法,继承于Object类,并且如果,声明了构造方法,那么再去调用默认构造方法就会报错,这也是为什么第二个图片编译过程中会报错,因为提供了构造方法,但是却调用了默认构造方法所以报错
4.执行结果如下
由此可见,1执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”,2执行类的构造函数。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。
5.TestStaticInitializeBlock.java执行结果如下
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 TestStaticInitializeBlock
{
public static void main(String[] args)
{
new Leaf(); }
}
结果如下
可以发现,用顺序来说,A类的子类B,B的子类C,如果执行C的构造方法,则先执行A的构造方法,在执行B的构造方法,最后执行C的构造方法。
另一方面,静态构造代码块的执行顺序最优先,然后是普通构造代码块,然后是无参构造方法,最后是有参构造方法。
另外,会先执行每个类的静态代码块,最后再按上面的顺序执行每个类的非静态代码块。
6.
静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
请编写代码验证你的想法。(发表到博客)代码如下
public class jingtaihanshu {
int x=4;
static int y=5;
public static void Method (){
System.out.println("实例变量x = " + new jingtaihanshu().x);//在静态方法中访问类的实例变量需首先进行类的实例化
System.out.println("静态变量y = " + y);//在静态方法中可直接访问类的静态变量 }
public static void main(String []args){
jingtaihanshu.Method();
jingtaihanshu asd=new jingtaihanshu();
System.out.println("新变量的x值为:"+asd.x);
}
}
结果为:
实例变量x = 4
静态变量y = 5
新变量的x值为:4
由此可知在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象
7.Integer类的装箱和拆箱到底是怎样实现的?
public class BoxAndUnbox { /**
* @param args
*/
public static void main(String[] args) {
int value=100; Integer obj=value; //装箱 int result=obj*2; //拆箱 } }
每个原始数据类型的包装类分别是每个数据类型标识符的完全体首字母大写形式,例如int包装类为Integer类,其中先要定义一个变量,然后【包装类】 标识符1 = 标识符2;然后拆箱 原始数据类型 标识符3 = 标识符2*2 ;然后反编译之后发现,装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 intValue方法实现的.
8.
两对整数明明完全一样,为何一个输出true,一个输出false?
由此可见 valueOf()相会重新new一个对象,再用==比较,就是比较两个对象的地址,所以就不相等了,所以代码结果就是false。
JAVA语言动手动脑问题的更多相关文章
- Java之动手动脑(三)
日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: //以下为 RandomMaker. ...
- java的动手动脑10月20日
(1)动手动脑 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { /*** @param args*/publi ...
- Java的动手动脑
动手动脑及课后实 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ...
- java异常处理动手动脑问题解决和课后总结
动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...
- java课java方法动手动脑
动手动脑: import java.util.Scanner; public class Random { public static void main(String[] args) { ...
- java课堂动手动脑及课后实验总结
动手动脑一:枚举 输出结果: false false true SMALL MEDIUM LARGE 分析和总结用法 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本 ...
- Java一些动手动脑实验
一.Java字段初始化的规律: 输出结果为:100 和 300 当把{filed=200}放在public int field=100之后输出结果为:200 和 300 所以执行类成员定义时指定的默认 ...
- Java的动手动脑(七)
日期:2018.11.18 博客期:025 星期日 Part 1:使用 Files.walkFileTree()来找出指定文件夹下大小大于1KB的文件 package temp; import jav ...
- Java的动手动脑(六)
日期:2018.11.8 星期四 博客期:022 --------------------------------------------------------------------------- ...
随机推荐
- hbase 查看hfile文件
emp表数据结构 hbase(main):098:0> scan 'emp' ROW COLUMN+CELL row1 column=mycf:depart, timestamp=1555846 ...
- Go语言代码结构与语法基础(二)
任何一门语言,都是从打印 hello world 开始的. 最简单的go代码: package main // 声明 main 包,表明当前是一个可执行程序 import "fmt" ...
- vue城市选择组件
适用于vue的城市选择组件 仓库地址 基本功能: 支持全选.反选以及全部清空. 支持按拼音筛选. 勾选省份将会勾选省份下所有城市. 返回数据可灵活处理. 安装 npm install cn-regio ...
- 运维LVS-NAT模式理解
一.LVS-NAT模式的工作原理这个是通过网络地址转换的方法来实现调度的.首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个 后端的真实服务器(RS ...
- react中父组件给子组件传值
子组件 state = { msg: 'a' } render(){ return<h1>{this.state.msg}</h1> } setInfo = (val)=> ...
- H5 拍照图片旋转、压缩和上传
原文地址:github.com/whinc/blog/… 最近接到一个“发表评论”的需求:用户输入评论并且可以拍照或从相册选择图片上传,即支持图文评论.需要同时在 H5 和小程序两端实现,该需求处理图 ...
- git ssh 绑定 GitLab
入职新公司之后,需要使用GitLab,可是我不会啊,又不想麻烦运维大佬,所以自己找乐一下,发现网上都是些很陈旧的教程,所以准备自己记录下来 第一步 设置Git端上的用户名和用户邮箱: 假如入你已经安装 ...
- python gRPC简单示例
Ubuntu18.04安装gRPC protobuf-compiler-grpc安装 sudo apt-get install protobuf-compiler-grpc protobuf-comp ...
- linux格式化磁盘命令
linux格式化磁盘命令 linux mkfs 指令:mkfs 使用权限 : 超级使用者 使用方式 : mkfs [-V] [-t fstype] [fs-opti ...
- linux各路径(目录)的解释
目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点, 比如用户use ...