Thinking in Java 第五章习题(初始化)

Thinking in Java 第四版完整版 第七章练习题 复用类 Thinking in Java 第四版完整版 第七章练习题,记录一下(jdk1.8.0) 1. /** * 练习1:创建一个简单的类。在第二个类中,将一个引用定义为第一个类 * 的对象。运用惰性初始化来实例化这个对象。 * @author admin11 * @date 2018年3月21日 */ class Simple { String s; pu... 阅读详情

练习1:创建一个类,它包含一个未初始化的String引用。验证该引用被Java初始化成了null。

class Test{
    String s;
}
public class Initialization {
    public static void main(String[] args) {
        Test t=new Test();
        System.out.println("s=: "+t.s);
    }
}
s=: null

练习2:创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器初始化的String域。这两种方式有何差异?

class Test{
        String s1;
        String s2="haha";
        String s3;
        Test(){
            s3="hehe";
        }
    }
    public class Initialization {
        public static void main(String[] args) {
            Test t=new Test();
            System.out.println("s1= "+t.s1);
            System.out.println("s2= "+t.s2);
            System.out.println("s3= "+t.s3);
        }
    }

结果:初始化效果相同,成员变量定义初始化定义时确定构造初始化构造时确定

s1= null
s2= haha
s3= hehe

练习3:创建一个带默认构造器(即无参构造器)的类,在构造器中打印一条消息。为这个类创建一个对象。

class Test{
    Test(){
        System.out.println("this is a Test");
    }
}
public class Initialization {

    public static void main(String[] args) {
        Test t=new Test();
    }
}

练习4:为前一个练习中的类添加一个重载构造器,令其接受一个字符串参数,并在构造器中把你自己的信息和接受的参数一起打印出来。

class Test{
    Test(){
        System.out.println("this is a Test");
    }
    Test(String s){
        System.out.println("Test: "+s);
    }
}
public class Initialization {
    public static void main(String[] args) {
        Test t=new Test("hello");
    }
}

结果:

Test: hello

练习5:创建一个名为Dog的类,它具有重载的bark()方法。此方法应根据不同的基本数据类型进行重载,并根据被调用的版本,打印出不同类型的狗吠(barking)、咆哮(howling)等信息。编写main()来调用所有不同版本的方法。

class Dog{
    Dog(){
        System.out.println("wang wang wang");
    }
    Dog(String s){
        System.out.println(s);
    }
    Dog(int i){
        System.out.println("howling"+i);
    }
}
/**
 * Initialization
 */
public class Initialization {

    public static void main(String[] args) {
        Dog d=new Dog();
        Dog d2=new Dog("hello");
        Dog d3=new Dog(5);
    }
}

练习6:修改前一个练习的程序,让两个重载方法各自接受两个类型的不同的参数,但二者顺序相反。验证其是否工作。

class Dog{
    Dog(){
        System.out.println("wang wang wang");
    }
    Dog(int i,String s){
        System.out.println(s+" "+i);
    }
}
/**
 * Initialization
 */
public class Initialization {

    public static void main(String[] args) {

        Dog d2=new Dog("hello",5);
    }
}

结果:String不能转成int,int不能转成String

练习8:编写具有两个方法的类,在第一个方法内调用第二个方法两次:第一次调用时不使用this关键字,第二次调用时使用this关键字——这里只是为了验证它是起作用的,你不应该在实践中使用这种方法。

class Test{
    public void method1(){
        System.out.println("this is method 1.");
    }
    public void method2(){
        this.method1();
    }
}
public class Initialization {
    public static void main(String[] args) {
        Test t=new Test();
        t.method2();
    }
}
class Test{
    Test(int i){
        System.out.println("this is "+i);
    }
    Test(int i,String s){
        this(i);
        System.out.println("this is "+s);
    }
}
public class Initialization {

    public static void main(String[] args) {
        Test t=new Test(1,"hello");
    }
}

结果

this is 1
this is hello

练习9:显示静态初始化 ,静态初始化在首次调用类时执行

class Cup{
    Cup(int marker){
        System.out.println("Cup("+marker+")");
    }
    void f(int marker){
        System.out.println("f("+marker+")");
    }
}
class Cups{
    static Cup cup1;
    static Cup cup2;
    static{
        cup1=new Cup(1);
        cup2=new Cup(2);
    }
    Cups(){
        System.out.println("Cups()");
    }
}
/**
 * Initialization
 */
public class Initialization {

    public static void main(String[] args) {
        System.out.println("inside main");
        Cups.cup1.f(99);
    }
}

输出结果如下:

inside main
Cup(1)
Cup(2)
f(99)

练习十:定义初始化和静态块初始化

class Something{
    String s;
    Something(String str){
        this.s=str;
        System.out.println("this is "+str);
    }
    public String toString(){
        return s;
    }
}
class Girl{
    static Something name=new Something("lili ");
    static Something favor;
    static{
        favor=new Something("sing dance");
    }
    public String toString(){
        return name+"loves "+favor;
    }
}
/**
 * chushihua
 */
public class chushihua {

     public static void main(String[] args) {
         Girl girl = new Girl();
        System.out.println(girl);
     }
}

结果:(toString,并不是你以为的驼峰and pengyouquan)

this is lili
this is sing dance
lili loves sing dance

练习十一:非静态示例初始化, 为了支持匿名内部类.

class Something{
    String s;
    Something(String str){
        this.s=str;
        System.out.println("this is "+str);
    }
    public String toString(){
        return s;
    }
}
class Girl{
    Something girl;
    Something boy;
    {
        girl=new Something("xuxiaoyi");
        boy=new Something("liwenhao");
    }
    public String toString(){
        return boy+" loves "+girl;
    }
}
/**
 * StaticIni
 */
public class StaticIni {
    public static void main(String[] args) {
        Girl girl=new Girl();
        System.out.println(girl);
    }
}

练习十二:String 数组

public class StringArrays {

    public static void main(String[] args) {
        int num=5;
        String[] sa=new String[num];
        for(int i=0;i<sa.length;i++){
            sa[i]="' "+i+" '";
        }
        System.out.println(Arrays.toString(sa));
    }
}

练习十三:String类型数组初始化

import java.util.Arrays;

class stringExample{
    String s;
    stringExample(String str){
        this.s=str;
        System.out.println("para = "+str);
    }
    public String toString(){
        return s;
    }
}
/**
 * StringArrays
 */
public class StringArrays {

    public static void main(String[] args) {
        int num=5;
        stringExample[] sea=new stringExample[num];
        System.out.println(Arrays.toString(sea));
        for(int i=0;i<sea.length;i++){
            sea[i]=new stringExample("' "+i+" '");
        }
        System.out.println(Arrays.toString(sea));
    }
}

结果

[null, null, null, null, null]
patal [0]
patal [1]
patal [2]
patal [3]
patal [4]
[[0], [1], [2], [3], [4]]

练习14: 可变参数

public class Variable {

    Variable(String... strs){
        for(String s:strs){
            System.out.print(s+" ");
        }
    }
    public static void main(String[] args) {
        new Variable("hello","world");
        System.out.println();
        new Variable(new String[]{"haha","hehe","heihei"});
    }
}

结果:

hello world
haha hehe heihei

练习15:使用enum

/**
 * TestEnum
 */
public class TestEnum {

    private enum Money{
        HUNDRED,
        FIFTY,
        TEN
    }
    public static void main(String[] args) {
        for(Money m:Money.values()){
            System.out.print(m+":"+m.ordinal()+" ");
            switch(m){
                case HUNDRED:
                    System.out.println(100);
                    break;
                case FIFTY:
                    System.out.println(50);
                    break;
                case TEN:
                    System.out.println(10);
                    break;
                default:
                    break;
            }
        }
    }
}
细读 Thinking in Java (一)一切都是对象 关于《Java编程思想》第二章 一切都是对象 阅读详情

相关推荐

《Thinking in Java》第4版课后习题答案解析

在Java中,类(Class)是创建对象的蓝图或模板。它描述了一组具有相同属性(成员变量)和方法(成员函数)的对象。类可以被视为一种数据类型,它定义了方法和变量的类型,但不创建任何实际的对象。return age;在上述代码中,我们定义了一个Person类,拥有name和age两个私有属性,以及相应的构造器和方法。方法被用来输出个人的自我介绍。对象是类的实例,是类的具体表现形式。当我们调用构造器时,就创建了一个Person对象,此时内存中会有。

weixin_42465140的博客 813

创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器初始化的String域。这两种方式有何差异

首先类demo类中定义了一个String的初始化后的String, 在定义了一个通过构造器初始化的String为null, 还定义了一个引用了构造器初始化的String a 通过打印出来的结果可以知道: 1.在定义时被初始化的String,在对象被实例化的时候被赋值引用。 2.在构造函数初始化的String,在对象被实例化的时候被赋值引用的是null,当构造函数初始化后才被赋值为he...

xiaozhuis000的博客 1647

《Thinking in Java》第四版习题解析与实战

访问控制修饰符是定义在类、方法和变量前的关键词,用于控制这些成员在其他类中的可见性和访问权限。Java语言支持四种访问控制修饰符:private:类的私有成员,只能在同一个类中被访问。default(无修饰符):类的包内访问权限,可以在同一个包内的所有类中被访问。protected:类的受保护成员,可以在同一个包内的类以及不同包的子类中被访问。public:类的公共成员,可以在任何地方被访问。每种访问控制修饰符都有其特定的使用场景,接下来将分别介绍它们的详细用法和效果。

weixin_36369848的博客 666

thinking in java test5.1练习(1)(2)

练习(1)题目:创建一个类,它包含一个未初始化的String引用。验证该引用被Java初始化成了null。 代码如下:public class Test5_1_1 { public static void main(String[] args){ Test t = new Test(); System.out.println(t.str); } }

nikerxu的博客 799

Altium Designer操作技巧(1)——原理图中如何批量替换元器件?

《AltiumDesigner批量替换元器件技巧分享》摘要:本文介绍了两种在AltiumDesigner中批量替换元器件的实用方法。方法一通过“查找相似对象”功能,可精准匹配并批量修改器件参数;方法二利用ActiveBOM功能,在BOM表中直观操作器件替换,推荐使用第二种方法可使BOM管理更高效。这些技巧能有效减少物料种类、降低贴装成本,特别适用于电阻电容等常用器件的批量替换。关注公众号获取更多电子设计技巧。

u012526819的博客 2590

【自动驾驶】汽车智能驾驶计算芯片

本文介绍汽车智能驾驶计算芯片的软硬件要求、 可靠性和安全性要求、 性能要求,和相应的试验方法。除了用于汽车智能驾驶, 其他领域的计算芯片可参照执行。

Mr.Cssust的博客 2631

【Java】实验7-2

新建一个java类TestString2 从键盘输入一行字符串“Dog loves”,利用String类的contains函数测试是否包含“Dog”字符串,如果包含在字符串结尾添加“ bones”,并打印输出 (使用StringBuilder拼接),否则输出“字符串不包含指定字符Dog”。 代码如下: import java.util.Scanner; public class TestString2 { public static void main(String[] args) { Str

qq_52776265的博客 565

SAP PI实战:5分钟搞定REST适配器同步接口配置(含Postman测试技巧)

本文详细介绍了如何在SAP PI中快速配置REST适配器同步接口,包括ESR设计、集成流配置及Postman测试技巧。通过实战步骤和关键参数设置,帮助开发者高效实现系统集成,特别适合需要实时数据交互的业务场景。

weixin_33738555的博客 485

【牛客刷题】每日一题——初始Java语言练习

hello,大家好!这是博主的新建专栏,【牛客刷题】,日后会不断更新数据结构与算法的练习题锦集,欢迎订阅!

冲击大厂之路!!! 1106

【C2000系列DSP的Bootloader详解】如何利用脚本自动合并Bin文件

本文通过OutconvertBin.py实现了 C2000 Bootloader+UserApp 的「ELF 转 BIN+BIN 合并」全流程自动化,核心优势如下: 架构适配:严格遵循 C28x 16 位大端格式,生成的 BIN 文件可直接烧录; 自动化程度高:一键完成清理、转换、合并,无需手动执行多个命令; 可追溯性:生成 CRC32 校验值,便于验证文件完整性; 量产友好:合并后的merged.bin支持一次性烧录,提升量产效率。

昔时扬尘处 184

华为OD机试真题 新系统2026-04-01 C++ 实现【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 1157

Thinking in Java 第四版完整版 第五章练习题 初始化与清理

Thinking in Java 第四版完整版 第五章练习题,记录一下(jdk1.8.0) 1. /** * 练习1:创建一个类,它包含一个未初始化的String引用。验证该引用被Java初始化成了null。 * @author admin11 * @date 2018年3月2日 */ public class Exercise501 { String str;...

summerSunStart的博客 1055

AI + 药物临床试验研发赛道

研究日期:2026-07-09 | 研究主题:AI + 药物临床试验研发赛道 | 聚焦岗位:Agent 平台架构师 / AI 工程架构师。

AI天才研究院 146

Thinking in Java之 继承与初始化

Thinking in Java 书中第七章有关继承与初始化的问题 在初始化顺序中,首先先初始化根基类中的static,然后是导出类,直到导出类static初始化完成。在本例中,首先初始化Insect基类中的static,即x1,此时打印出“static Insect.x1 initialized”;而后是导出类(子类)static x2初始化,此时打印出static Beetle.x2

做一名努力的通信程序员 507

RT-DETR改进策略【卷积层】| CVPR-2020 Strip Pooling 空间池化模块 处理不规则形状的对象 含二次创新

一、本文介绍 本文记录的是利用Strip Pooling模块优化RT-DETR的目标检测网络模型。Strip Pooling结合了长而窄的卷积核形状在一个空间维度上的长程关系捕捉能力和在另一个空间维度上的局部细节捕捉能力,有效地处理复杂的场景信息。这一机制通过采用1×N1×N1×N或N×1N×1N×1的池化核形状来适应不同的图像特征,提高模型对目标形状和分布的适应性。在场景解析网络中,Strip Pooling可以被用于提升对具有长程带状结构或离散分布目标的解析能力,特别是在复杂场景或不同对象布局条件下效果

Limiiiing的博客 580

目标检测YOLO实战应用案例100讲-基于YOLOv7的番茄采摘机械手场景感知及试验(下)

根据软件系统的设计需求,制定系统的可行性方案分析,编写系统的相关程序和 调试运行环境,对系统进行测试,以实现对番茄数据的采集及监测。登陆界面登陆后,进入选择界面,菜单包括了对番茄种植棚室的固定相机数据的监测、 对番茄采摘机械手的双目相机采集的番茄的静态、动态数据的获取、对番茄静态、动态数 据处理的功能菜单等选项。与利用人工去进行对于番茄果实的识别和数目的统计相比,番茄视觉系统自动记录番 茄数量以及红色已经成熟的番茄、青色未成熟番茄的数量,减轻人工记录的工作量,减少 人工记录的误差,从经济方面是可行的。

qq_36130719的博客 812

Thinking in java 第8章 多态 笔记+习题

Thinking in java 第八章 多态 8.2 转机 1. Java中除了static方法和final方法之外,其他所有方法都是后期绑定(在运行时根据对象的类型进行绑定)。因此一般我们不必判断是否应该进行后期绑定,它会自动发生。 2. final可以关闭后期绑定以调用生成更有效的代码,提高性能。但对整体没太大影响。 3. 正是由于后期绑定,编译器能够正确调用向上转型后导出类重写的方法。 4. 缺陷: 导出类不能覆盖私有方法,会被当成一个新的方法(入口不能缩小)。 如果一个方法是静态方法

soyamilk233的博客 1827

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Thinking in Java 第五章练习题

练习1:创建一个类,它包含一个未初始化的String引用。验证该引用被Java初始化成了null。 代码如下:public class Test5_1_1 { public static void main(String[] args) { Test t = new Test(); System.out.println(t.str); } } class Test

qq_39654068的博客 1331

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Thinking in java 第2章 一切都是对象 习题

Thinking in java 第二章 习题 练习1:创建一个类,它包含一个int域和一个char域,它们都没有被初始化,将它们的值打印出来,以验证Java执行了默认初始化。 public class E2_1 { public int i; public char c; } public class Main { public static void main(String[] args) { E2_1 e = new E2_1(); ...

soyamilk233的博客 414

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Thinking in java 第5章 初始化与清理 笔记+习题

Thinking in java 第五章 初始化与清理 5.0 序章 1. C中容易忽略初始化和清理,导致内存泄漏;C++中引入了构造器的概念;Java中也采用了构造器,并额外提供了“垃圾回收器”。 5.2 方法重载 1. 如果传入数据类型小于方法中声明的形式参数类型,实际数据类型就会被提升。char类型若没有恰好接受char参数的方法,就会被直接提升为int类型。 2. 如果传入数据类型大于方法中声明的形式参数类型,就必须采用强制转换,不然编译器会报错。 5.4 this关键字 1. 当需要

soyamilk233的博客 525

《 Thinking in Java 》第五章 初始化与清理

用构造器确保初始化 在 Java 中,通过提供构造器,类的设计者可确保每个对象都会得到初始化。创建对象时,如果类具有构造器,Java 就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。 命名的方案:构造器采用与类相同的名称。 从概念上讲,“初始化” 与 “创建” 是彼此独立的,然而在 Java 的代码中,找不到对 initialize() 的方法的明确调用。在 Java ...

努力奋斗 353

Thinking in java目录概述

文章目录目的整书概况总结 目的 为什么要选取《Thinking in java》这本书? 语言本身:Java程序语言在实际场景开发中有非常多的通途,许多互联网产品的basic依托于java语言来实现 书籍:我始终认为思想性的东西是最重要的,可以为自己的行为划定标准,知道什么样的思考方向是合理的,基本的思考框架应该是什么 阅读书籍首先应该对整本书有一个初略的了解和认识。 整书概况 通过阅读目录大...

在黑夜中前行 1349

《Thinking in Java》读书笔记5

第五章 初始化与清理 目录 第五章 初始化与清理 5.1 用构造器确保初始化 5.2 方法重载 5.2.1 区分重载方法 5.2.2 涉及基本类型的重载 5.2.3 以返回值区分重载方法 5.3 默认构造器 5.4 this关键字 5.4.1 在构造器中调用构造器 5.4.2 static的含义 5.5 清理:终结处理和垃圾回收 5.5.1 finalize()的用途何在...

翔翔的博客 682

Thinking in java 第五章 - 初始化与清理

Thinking in java 第五章 - 初始化与清理 随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。 1 用构造器确保初始化 构造器的作用就是确保了在你能操作对象之前,它已经被其当地初始化了。 请注意,由于构造器的名称必须与类名完全相同,所以“每个方法首字母小写”的编码风格并不适用构造器。 从概念上来讲,初始化与创建是彼此独立的,在代码中却找不到对initialize() 方法的明确调用。在Java中,初始化和创建捆绑在一起,两者不能分离。 ...

Syntactic Sugar 225

《Thinking In Java》 VS 《Effective Java》 VS 《深入理解Java虚拟机》

今天刚考完试,在5天以前的前4个月时间里,我很庆幸自己选了一个看书的学习途径。从上个学期的暑假到现学期的11周里面,读了《Thinking In Java》、《深入理解Java虚拟机》和《Effective Java》,感悟颇多。首先先说明一下,我以前是看视频学习的,就做过两三个学校的网站,都已经上线在使用。没做过什么特别高大上的东西,所以我是处在新手的角度去读书的,我也知道自己的理解很浅,不

小浩子的博客 2万+
上一篇: Thinking in Java 第四章练习(吸血鬼数字)
下一篇: Java代码实现,求解汉诺塔问题。
周末的丢
博客等级 码龄7年 197粉丝 331原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值