1.

早期经常这样定义变量
  int value=100;
前面的示例中这样定义变量
  MyClass obj = new MyClass();
这两种方式定义的变量是一样的吗?
 
答:不一样,后者开辟了空间,而且后者的意思是,为 MyClass类的对象obj构造空间,并且调用MyClass的构造函数。
 
 
 
2.

对象变量也可以使用“==”判断两变量值是否相等吗?

第一个执行结果为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语言动手动脑问题的更多相关文章

  1. Java之动手动脑(三)

    日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: //以下为 RandomMaker. ...

  2. java的动手动脑10月20日

    (1)动手动脑 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { /*** @param args*/publi ...

  3. Java的动手动脑

    动手动脑及课后实 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ...

  4. java异常处理动手动脑问题解决和课后总结

    动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...

  5. java课java方法动手动脑

    动手动脑: import java.util.Scanner; public class Random { public static void main(String[] args) {       ...

  6. java课堂动手动脑及课后实验总结

      动手动脑一:枚举   输出结果: false false true SMALL MEDIUM LARGE 分析和总结用法 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本 ...

  7. Java一些动手动脑实验

    一.Java字段初始化的规律: 输出结果为:100 和 300 当把{filed=200}放在public int field=100之后输出结果为:200 和 300 所以执行类成员定义时指定的默认 ...

  8. Java的动手动脑(七)

    日期:2018.11.18 博客期:025 星期日 Part 1:使用 Files.walkFileTree()来找出指定文件夹下大小大于1KB的文件 package temp; import jav ...

  9. Java的动手动脑(六)

    日期:2018.11.8 星期四 博客期:022 --------------------------------------------------------------------------- ...

随机推荐

  1. 爬取网易云音乐评论!python 爬虫入门实战(六)selenium 入门!

    说到爬虫,第一时间可能就会想到网易云音乐的评论.网易云音乐评论里藏了许多宝藏,那么让我们一起学习如何用 python 挖宝藏吧! 既然是宝藏,肯定是用要用钥匙加密的.打开 Chrome 分析 Head ...

  2. zabbix4安装部署

    参考: https://www.cnblogs.com/barneywill/p/10380622.html https://www.cnblogs.com/yinzhengjie/p/1037256 ...

  3. Centos7安装Swoole

    准备:安装好php后,还需要将PHP的可执行目录添加到环境变量中. //打开文件 vi ~/.bashrc //在文件末尾添加这两行,保存退出 export PATH=/usr/local/php/b ...

  4. 08.AutoMapper 之嵌套映射(Nested Mappings)

    https://www.jianshu.com/p/013715d2352d   嵌套映射(Nested Mappings) 当映射引擎执行映射时,它可以使用各种方法之一来解析目标成员值.其中一种方法 ...

  5. 普通交叉验证(OCV)和广义交叉验证(GCV)

    普通交叉验证OCV OCV是由Allen(1974)在回归背景下提出的,之后Wahba和Wold(1975)在讨论 了确定多项式回归中多项式次数的背景,在光滑样条背景下提出OCV. Craven和Wa ...

  6. 在docker容器下利用数据卷实现在删除了mysql容器或者镜像的情况下恢复数据

    当把mysql容器销毁,在新建一个容器,进行之前的数据恢复. 因为之前建立了数据卷,那么现在就可以利用这个数据卷进行数据恢复. 使用docker volume create volume_name命令 ...

  7. the server responsed width a status of 404 (Not Found)

    最近使用VS code写代码,使用Beautify插件格式化代码后,报以下错误: 反复查看代码,初始感觉没什么问题,有点懵.. 随着时间的推移,后来果然发现问题所在: 在加载模块的地方,多出了个空格( ...

  8. 十一、LaTex中的矩阵

  9. ieda与svn的配置与使用

    一.idea配置svn 快捷键Ctrl+Alt+s或者File--Settings-- Subversion 设置svn客户端(小乌龟)的svn.exe可执行程序(如果找不到,请看另一篇文章)     ...

  10. TensorRt安装

    1.下载 https://developer.nvidia.com/nvidia-tensorrt-5x-download 选择5 GA版本,注意选择与自己CUDA匹配的版本 2.安装 参考:http ...