java-03-动手动脑
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-动手动脑的更多相关文章
- 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 --------------------------------------------------------------------------- ...
- Java的动手动脑(五)
日期:2018.11.1 星期四 博客期:021 Part1: 运行代码 class Grandparent { public Grandparent() { System.out.println(& ...
随机推荐
- centos7下docker二进制安装
问题描述: 内网离线环境下,安装docker.二进制来的还是快点,或者内网搭建yum的epel仓库! 环境: centos7.x docker-18.9.0 x86_64 static //二进制 ...
- Swift中关于集合计算的几种函数记录(intersect、symmetricDifference、union、subtract)
很久之前用过一次,后来就忘了...扎心,现在记录一下 PS:这几种函数其实不限于swift内的,在JavaScript.python.DB等其他语言,应该也有类似用法,这里我只简单讲了在swift内的 ...
- Linux下清理内存和Cache方法见下文:
暂时目前的环境处理方法比较简单: 在root用户下添加计划任务: */10 * * * * sync;echo 3 > /proc/sys/vm/drop_caches; 每十分钟执行一次,先将 ...
- C#版Websocket实例
C#版Websocket实例 Demo地址:www.awbeci.xyz websocket有java.nodejs.python,Php等等版本,我使用的是C#版本,服务器端是Fleck,git ...
- 关于python单例的常用几种实现方法
这两天在看自己之前写的代码,所以正好把用过的东西整理一下,单例模式,在日常的代码工作中也是经常被用到, 所以这里把之前用过的不同方式实现的单例方式整理一下 装饰器的方式 这种方式也是工作中经常用的一种 ...
- MySql基本查询、连接查询、子查询、正则表达查询解说
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 查询数据指从数据库中获取所须要的数据.查询数据是数据库操作中最经常使用,也是最重要的操作.用户 ...
- [转]SOA架构设计经验分享—架构、职责、数据一致性
阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DD ...
- VMware vCenter Server 6.5安装
实验环境: 数据中心操作系统 : Windows server 2008 R2(建议配置8G内存) 数据中心安装包版本: VMware vCenter Server 6.5 数据中心数据库: ...
- tomcat 配置 使用综合
[参考]Tomcat 7.0安装与配置 [参考]tomcat 控制台日志(startup.bat)输出到指定文件中 [参考]将Java web应用部署到Tomcat 及部署到Tomcat根目录 的三种 ...
- javassist实例
我们常用到的动态特性主要是反射,在运行时查找对象属性.方法,修改作用域,通过方法名称调用方法等.在线的应用不会频繁使用反射,因为反射的性能开销较大.其实还有一种和反射一样强大的特性,但是开销却很低,它 ...