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. nodejs实现服务端重定向

    nodejs实现服务端重定向:https://www.jianshu.com/p/5a1500fcd713

  2. C++中的数据类模板

    1,预备知识: 1,模板参数可以是数值型参数(非类型参数): 1,代码示例: template <typename T, int N> void func() { T a[N]; // 使 ...

  3. 利用BFS解决拯救007问题 -- 数据结构

    题目: 7-1 拯救007 (30 分) 在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接 ...

  4. Head First PHP&MySQl第二章代码

    PHP: <html> <head> <title>外星人绑架了我--报道一起绑架</title> </head> <body> ...

  5. php文件上传客户端限制和服务器端限制

    客户端限制 1,通过表单隐藏域限制文件上传文件的最大值<input type='hidden' name='MAX_FILE_SIZE' VALUE='字节数' />通过accept属性限 ...

  6. 0-1-Tree CodeForces - 1156D (并查集)

    大意: 给定树, 边权为黑或白, 求所有有向路径条数, 满足每走过一条黑边后不会走白边. 这题比赛的时候想了个假算法, 还没发现..... 显然所求的路径要么全黑, 要么全白, 要么先全白后全黑, 所 ...

  7. JavaEE--JSP指令

    JSP指令用于提供整个JSP页面的相关信息以及用于JSP页面与容器之间的通信.JSP指令有三种:page指令.include指令.taglib指令 1.page指令 用于设定整个JSP页面的属性和相关 ...

  8. 使用QtXlsx来读写excel文件

    概述:QtXlsx是功能非常强大和使用非常方便的操作excel类库.包括对excel数据读写.excel数据格式设置及在excel里面根据数据生成各种图表. 下面重点介绍如何安装和使用QtXlsx. ...

  9. 在ubuntu上使用Openresty+lua实现WAF----折腾笔记

    1.1 参考loveshell的waf实现思路,再此感谢下面其中一部分是转载 1.2 WAF的功能 支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝.支持URL白名单,将不需要过滤的URL进行定 ...

  10. matlab 正弦信号产生

    fs=2400;%设定采样频率N=1000; %采样的点数n=0:N-1;t=n/fs; %1/fs相当于隔多长时间才一个点f1=50;%设定争先信号频率xn=sin(2*pi*f1*t);figur ...