java 课后题_java课后思考题(三)

1.以下代码为何无法通过编译?哪儿出错了?

88fc918160c1292b98f95d0f6801bf53.png

因为在Foo类中已经有了一个Foo类的有参构造函数,所以Foo类中已经不默认Foo()的无参构造函数,所以在new Foo()时无法调用构造函数。所以在无法通过译。可以再在Foo类中写一个无参构造函数,这样在new Foo()时,就可以通过编译。

2.使用上页幻灯片中定义的类,以下代码输出结果是什么?

745485248a4608f0d14b6fa08130f4fe.png

59be482fee18bc54176eb3f37e263403.png

结果截图:

d880165e8be7e4475dfa66a4c27189c4.png

java字段初始化的规律:所有类的变量都默认初始化为null,比如String a,Integer b;数字类的原始数据类型默认初始化为0,比如int a,short b,char c;boolean 默认初始化为false。Java进行初始化的地方有两个:初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。

3.请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

结果截图:

0d3888f396588c965149bc15a6367535.png

所有的静态初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是:父类的静态初始化块>子类的静态初始化块>父类的初始化块>父类的构造函数>子类的初始化块>子类的构造函数.

4.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

public class A {

public static void main(String[] args) {

A a=new A();

System.out.println("value="+a.AB());

}

static int AB() {

A a=new A();

int value=a.AC();

return value;

}

int AC() {

int value=1;

return value;

}

}

结果截图:

ccad8d916fdea67a0d10b2d294e6837f.png

5.两对整数明明完全一样,为何一个输出true,一个输出false?

989183213c46f0fb854d12b9d29cb62c.png

原因:

214079b0629c12594b3cc3f7212d50be.png

java在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。i1和j1的数值为100,因此会直接从cache中取已经存在的对象,所以i1和i2指向的是同一个对象,而i2和j2则是分别指向不同的对象。"=="符号在比较对象的时候是比较的内存地址,而对于原始数据类型是直接比对的数据值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
总共11页 一万字左右 皆为个人上课整理笔记。 贴上前几道整理以作预览 1、 缩JDK的含义是什么。 JDK 是Java开发工具包 (Java Development Kit ) 的缩。它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境。其中包括了Java编译器、JVM、大量的Java工具以及Java基础API里面是Java类库和Java的语言规范,同时Java语言的任何改进都应当加到其中,作为后续版本发布。要成为一名程序员,JDK是一种最基本的工具。 (JDK是Java development toolkit,相当于是Java的库函数,是编译,运行java程序的工具包。) 2、 解释Java语言跨平台的技术基础。 因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。 3、 什么是Java语言的自动垃圾收集。 4、 说明J2SE、J2ME、J2EE各自的含义。 J2EE是Java 2 enterprise edition是Java的一种企业版用于企业级的应用服务开发 J2SE是Java 2 standard edition是Java的标准版,用于标准的应用开发 J2ME是Java 2 Micro Edition是Java的微型版,常用于手机上的开发 J2EE,J2SE,J2ME是java针对不同的的使用来提供不同的服务,也就是提供不同类型的类库。 5、 Java的包是什么含义,有哪些作用。 包就是用来装不同java源文件和类文件的文件夹。 作用有两个:一个是防止重名现象,还有一个是隐藏具体实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值