1.

问题:这两种方式定义的变量是一样的吗?

早期我们经常这样定义变量
  int value=100;
前面的示例中这样定义变量
  MyClass obj = new MyClass();

回答:一般情况是一样的,都是类的实例化,一个是简便写法,一个是正常定义对象的方式。

2.

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

回答:如果两个对象变量指向同一个对象时,可以用“==”判断两变量是否相等。

Java中如果要比较对象的“内容”,可以通过重写基类的equals();除了重写基类的equals方法,还可以“重载(overload)”equals( )方法;

3

问题:请总结一下,这个方法有哪些“与众不同之处”,你能列出几条?

回答:1.方法名是类名

2.没有返回值类型

4.

问题:以下代码为何无法通过编译?哪儿出错了?

回答:Foo类写了一个有参的构造函数,但没有无参的构造函数。这时候系统不会调用默认的构造函数,

而主函数中使用了无参的构造函数,所以产生了错误。即如果类提供了一个自定义的构造方法,将导致

系统不再提供默认构造方法。

5.

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

执行代码:

public class InitializeBlockDemo {

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

结果截图:

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

6.

自行总结Java字段初始化的规律:

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

2执行类的构造函数。

3类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”.

7.

问题:

请运行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(); }
}

结果截图:

1静态初始化块只执行一次。
2创建子类型的对象时,也会导致父类型的静态初始化块的执行。

8

问题:静态方法中只允许访问静态数据,那么,如何在静态方法中访问类

的实例成员(即没有附加static关键字的字段或方法)?请编写代码验证你的想法。

执行代码:

package 列子;
public class JingtaiDiaoyong {
     int a = 3;
     static int b=4;  
     public static void ceshi()
     {
        System.out.println("非静态变量a=" + new JingtaiDiaoyong().a);
        System.out.println("静态变量b=" + b);
     }
 public static void main(String[] args)
     {
     JingtaiDiaoyong.ceshi();
     JingtaiDiaoyong j1 = new JingtaiDiaoyong();
  System.out.println("a=" + j1.a);
 
     }
}

结果截图:

静态方法中访问类的实例成员先进行类的实例化。

9.

问题:Integer类的装箱和拆箱到底是怎样实现的?

在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Integer的intValue方法。

因此可以用一句话总结装箱和拆箱的实现过程:

装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 intValue方法实现的.

10.

问题:代码(StrangeIntegerBehavior.java)输出诡异的结果,原因何在?

代码:

public class StrangeIntegerBehavior
{ public static void main(String[] args)
{ Integer i1=; Integer j1=; System.out.println(i1==j1); Integer i2=; Integer j2=; System.out.println(i2==j2); } }

结果截图:

integer实现过程中,int型范围在-128到127之间,在这之间,反复使用integer,都是重复上次的对象,都是一样的,

但超出范围,反复使用时,会生成新的对象,与上一次不会相等。

java-03-动手动脑的更多相关文章

  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 --------------------------------------------------------------------------- ...

  10. Java的动手动脑(五)

    日期:2018.11.1 星期四 博客期:021 Part1: 运行代码 class Grandparent { public Grandparent() { System.out.println(& ...

随机推荐

  1. gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例)

    gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例) 首先祭出官网文档链接:https://docs.gitlab.com/omnibus/settings/smtp.html 其实 ...

  2. grid - 隐式地命名网格区域名称

    通常可以将网格线命名成任何你想命名的名称,如果网格线名称添加-start和-end的后缀,其实也隐式的创建一个网格区域,可以用来设置网格项目的位置. 在这个示例中,行和列都具有inner-start和 ...

  3. 使用Guava的RateLimiter完成简单的大流量限流

    限流的一般思路: 1.随机丢弃一定规则的用户(迅速过滤掉90%的用户): 2.MQ削峰(比如设一个MQ可以容纳的最大消息量,达到这个量后MQ给予reject): 3.业务逻辑层使用RateLimite ...

  4. linux 通过nvm安装node

    官方介绍:https://github.com/creationix/nvm#installation PS:通常不要用root权限安装软件,因为线上任何服务部署都不允许用root,其他软件用root ...

  5. NOIP2011普及组 瑞士轮

    OJ地址: https://www.luogu.org/problemnew/show/P1309 http://bailian.openjudge.cn/practice/4031/ 总时间限制:  ...

  6. VS code配置go语言开发环境之自定义快捷键及其对应操作

    VS code 配置 自定义快捷键 及其对应操作   由于 vs code 的官方 go 插件不支持像 goland 一样运行当前 go 文件, 只能项目 或者 package 级别地运行, 因此有必 ...

  7. MySQL执行计划解析

    前言 在实际数据库项目开发中,由于我们不知道实际查询时数据库里发生了什么,也不知道数据库是如何扫描表.如何使用索引的,因此,我们能感知到的就只有SQL语句的执行时间.尤其在数据规模比较大的场景下,如何 ...

  8. SNF软件开发机器人-子系统-表单-表单设计

    表单设计 在我们做程序时总要对表单的内容进行设计,然而对控件位置等信息的调整总是麻烦的,还常常容易出错.SNF软件机器人完美的解决了这个问题. 1.效果展示: 2.使用说明: (1)打开页面,选中开发 ...

  9. SQL SERVER数据库删除LOG文件和清空日志的方案

    原文:SQL SERVER数据库删除LOG文件和清空日志的方案 数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文 ...

  10. 物联网架构成长之路(25)-Docker构建项目用到的镜像1

    0. 前言 现在项目处于初级阶段,按照规划,先构建几个以后可能会用到的Image,并上传到阿里云的Docker仓库.以后博客中用到的Image,大部分都会用到这几个基础的Image,构建一个简单的物联 ...