java编程思想随笔(二)/初始化

基于AT32F421的紧凑型FOC电机驱动板设计 磁场定向控制(FOC)是永磁同步电机(PMSM)与无刷直流电机(BLDC)实现高精度转矩控制和高效运行的核心技术,其本质是通过Clarke/Park坐标变换解耦定子电流,实现d轴磁链与q轴转矩的独立调节。该技术依赖实时性严苛的电流采样、高精度位置反馈及确定性PWM生成,广泛应用于机器人关节、智能装备等中小功率伺服场景。国产Cortex-M4微控制器(如AT32F421)凭借集成ADC、高级定时器与DSP指令集,已成为低成本、高可靠FOC嵌入式实现的理想平台。本文围绕一款工程化FOC驱动板展开,涵盖低侧电流采 阅读详情

        “初始化”和“清除”,许多 C程序的错误都是由于程序员忘记初始化一个变量造成的。清除是另一个特殊的问题,因为用完一个元素后,由于不再关心,所以很容易把它忘记。这样一来,那个元素占用的资源会一直保留下去,极易产生资源(主要是内存)用尽的后果。C++引入了“构建器”的概念。这是一种特殊的方法,在一个对象创建之后自动调用。Java 也沿用了这个概念,还新增了自己的“垃圾收集器”,能在资源不再需要的时候自动释放它们。

这里笔者将记录初始化和清除的问题,主要是初始化内容,以下内容由参考原文和自己理解组成。

初始化:

一、

    对于类的使用,可将其想象为自己写的每个类都要调用一次 initialize()。这个名字提醒我们在使用对象之前,应首先进行这样的调用。在 Java 中,提供了名为“构建器”特殊方法,可担保每个对象都会得到正确的初始化。

    然后考虑如何命名这个“构建器”方法。C++采取的方案是最简单的,且更有逻辑性,所以也在Java 里得到了应用:构建器的名字与类名相同。这样一来,可保证这样的一个方法会在初始化期间自动调用。

 例如:

class Rock {
    Rock() { // This is the constructor
        System.out.println("Creating Rock");
    }
}

现在,一旦创建一个对象:

new Rock();
就会分配相应的存储空间,并调用构建器。这样可保证在我们经手之前,对象得到正确的初始化。请注意所有方法首字母小写的编码规则并不适用于构建器。这是由于构建器的名字必须与类名完全相同!

    和其他任何方法一样,构建器也能使用自变量,以便我们指定对象的具体创建方式。可非常方便地改动上述例子,以便构建器使用自己的自变量,如下:

class Rock {
    Rock(int i) {
        System.out.println("Creating Rock number " + i);
    }
}

构建器属于一种较特殊的方法类型,因为它没有返回值。这与 void 返回值存在着明显的区别。对于void 返回值,尽管方法本身不会自动返回什么,但仍然可以让它返回另一些东西。

    注意,不能根据返回值重载(过载):

void f() {}
int f() {}

若编译器可根据上下文(语境)明确判断出含义,比如在 int x=f()中,那么这样做完全没有问题。然而,我们也可能调用一个方法,同时忽略返回值;因为我们关心的不是返回值,而是方法调用的其他效果。假如我们像下面这样调用方法:

f();

Java 怎样判断f()的具体调用方式呢?而且别人如何识别并理解代码呢?由于存在这一类的问题,所以不能根据返回值类型来区分过载的方法。

    默认构建器是没有自变量的,它们的作用是创建一个“空对象”。若创建一个没有构建器的类,则编译程序会帮我们自动创建一个默认构建器。如这一行:

new Bird();

它的作用是新建一个对象,并调用默认构建器。然而,如果已经定义了一个构建器(无论是否有自变量),编译程序都不会帮我们自动生成一个。

二、

    this关键字

    如果有两个同类型的对象,分别叫作a 和b,那么您也许不知道如何为这两个对象同时调用一个 f()方法:

class Banana { void f(int i) { /* ... */ } }
Banana a = new Banana(), b = new Banana();
a.f(1);
b.f(1);

若只有一个名叫f()的方法,它怎样才能知道自己是被 a 还是被b 调用的呢?

编译器为我们完成了一些幕后工作。其中的秘密就是将准备操作的那个对象的句柄(引用)传递过去。所以前述的两个方法调用就变成了下面这样的形式:

Banana.f(a,1);
Banana.f(b,1);

这是内部的表达形式,通过它可理解幕后到底发生了什么事情。

    假定我们在一个方法的内部,并希望获得当前对象的句柄(引用)。可使用关键字:this。this 关键字(注意只能在方法内部使用)可像其它对象句柄一样使用。假若准备从某个类的一个方法内,调用此类的另一个方法,就不必使用this:

class Apricot {
    void pick() { /* ... */ }
    void pit() { pick(); /* ... */ }
}

在pit()内部,我们可以说 this.pick(),但事实上无此必要。编译器能帮我们自动完成。

三、

    这里再说说变量的初始化:

若将基本类型设为一个类的成员变量。由于任何方法都可以初始化或使用那个数据,所以在正式使用数据前,若强制让程序员将其初始化成一个适当的值,就可能不是一种有效的做法。因此,一个类的所有基本类型变量都应该获得一个初始值。

使用下面这段程序看到这些值:

class Measurement {
    boolean t;
    char c;
    byte b;
    short s;
    int i;
    long l;
    float f;
    double d;
    void print() {
        System.out.println(
        "Data type Inital value\n" +
        "boolean " + t + "\n" +
        "char " + c + "\n" +
        "byte " + b + "\n" +
        "short " + s + "\n" +
        "int " + i + "\n" +
        "long " + l + "\n" +
        "float " + f + "\n" +
        "double " + d);
    }
}
public class InitialValues {
    public static void main(String[] args) {
        Measurement d = new Measurement();
        d.print();
    }
} 
输入结果如下:
Data type Inital value
boolean false
char
byte 0
short 0
int 0
long 0
float 0.0
double 0.0

其中,Char 值为空(NULL),没有数据打印出来。

在一个类的内部定义一个对象句柄时,如果不将其初始化成新对象,那个句柄就会获得一个空值。

四、

有继承关系的类的初始化:

class Art {
    Art() {
        System.out.println("Art constructor");
    }
}
class Drawing extends Art {
    Drawing() {
        System.out.println("Drawing constructor");
    }
}
public class Cartoon extends Drawing {
    Cartoon() {
        System.out.println("Cartoon constructor");
    }
    public static void main(String[] args) {
        Cartoon x = new Cartoon();
    }
}
该程序的输出显示了自动调用:
Art constructor
Drawing constructor

Cartoon constructor

结论:基础类会在衍生类访问它之前得到正确的初始化。

五、

这里再记录一下类的相对复杂的初始化顺序:

在一个类里,初始化的顺序是由变量(成员变量)在类内的定义顺序决定的。即使变量定义遍布于方法定义的中间,那些变量仍会在调用任何方法之前得到初始化,包括在构建器调用之前。

class Tag {
    Tag(int marker) {
        System.out.println("Tag(" + marker + ")");
    }
}
class Card {
    Tag t1 = new Tag(1); // Before constructor
    Card() {
        // Indicate we're in the constructor:
        System.out.println("Card()");
        t3 = new Tag(33); // Re-initialize t3
    }
    Tag t2 = new Tag(2); // After constructor
    void f() {
        System.out.println("f()");
    }
    Tag t3 = new Tag(3); // At end
}
public class OrderOfInitialization {
    public static void main(String[] args) {
        Card t = new Card();
        t.f(); }
}

结果为:

Tag(1)
Tag(2)
Tag(3)
Card()
Tag(33)
f()

在Card 中,Tag 对象的定义故意放置在构造器前后,以证明它们都会在构建器进入或者发生其他任何事情之前得到初始化。除此之外,t3 在构建器内部得到了重新初始化。

然后加入静态变量的执行demo如下:

class Bowl {
    Bowl(int marker) {
        System.out.println("Bowl(" + marker + ")");
    }
    void f(int marker) {
        System.out.println("f(" + marker + ")");
    }
}
class Table {
    static Bowl b1 = new Bowl(1);
    Table() {
        System.out.println("Table()");
    b2.f(1);
    }
    void f2(int marker) {
        System.out.println("f2(" + marker + ")");
    }
    static Bowl b2 = new Bowl(2);
}
class Cupboard {
    Bowl b3 = new Bowl(3);
    static Bowl b4 = new Bowl(4);
    Cupboard() {
        System.out.println("Cupboard()");
    b4.f(2);
    }
    void f3(int marker) {
        System.out.println("f3(" + marker + ")");
    }
    static Bowl b5 = new Bowl(5);
}
public class StaticInitialization {
    public static void main(String[] args) {
        System.out.println(
        "Creating new Cupboard() in main");
        new Cupboard();
        System.out.println(
        "Creating new Cupboard() in main");
        new Cupboard();
        t2.f2(1);
        t3.f3(1);
    }
    static Table t2 = new Table();
    static Cupboard t3 = new Cupboard();
} 

结果如下:

Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
f2(1)
f3(1)
初始化的顺序是首先static(如果它们尚未由前一次对象创建过程初始化),接着是非static 对象。


最后再总结一下对象的创建过程。请考虑一个名为 Dog的类:
(1) 类型为 Dog的一个对象首次创建(new)时,或者Dog 类的static方法/static 字段首次访问时,Java 解释器必须找到Dog.class。
(2) 找到Dog.class 后(它会创建一个 Class对象),它的所有 static初始化模块都会运行。因此,static初始化仅发生一次——在 Class 对象首次载入的时候。
(3) 创建一个new Dog()时,Dog 对象的构建进程首先会在内存堆(Heap)里为一个 Dog对象分配足够多的存储空间。
(4) 将Dog中的所有基本类型设为它们的默认值。
(5) 进行字段定义时发生的所有初始化都会执行。

(6) 执行构建器。

最后一个例子如下:

class Insect {
    int i = 9;
    int j;
    Insect() {
        prt("i = " + i + ", j = " + j);
        j = 39;
    }
    static int x1 =
    prt("static Insect.x1 initialized");
    static int prt(String s) {
        System.out.println(s);
        return 47;
    }
}

public class Beetle extends Insect {
    int k = prt("Beetle.k initialized");
    Beetle() {
        prt("k = " + k);
        prt("j = " + j);
    }
    static int x2 =
    prt("static Beetle.x2 initialized");
    static int prt(String s) {
        System.out.println(s);
        return 63;
    }
    public static void main(String[] args) {
        prt("Beetle constructor");
        Beetle b = new Beetle();
    }
} 
该程序的输出如下:
static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
i = 9, j = 0
Beetle.k initialized
k = 63
j = 39

1、Beetle 运行时,第一件事是装载,在装载过程中,发现它有一个基础类(即extends 关键字要表达的意思),然后随之将其载入。无论是否准备生成那个基础类的一个对象,这个过程都会发生。

所以先执行Insect类。

2、接下来,会在基础类(此时是Insect)执行 static 初始化,再在下一个衍生类执行,以此类推。保证这个顺序是非常关键的,因为衍生类的初始化可能要依赖于对基础类成员的正确初始化。(《JAVA解惑》中有不少因初始化问题引发的错误案例)

所里这里先初始化Insect内的x1,x1调用prt()打印得到static Insect.x1 initialized,并且x1值为47

然后初始化Beetle,执行静态变量,执行Beetle的prt()打印得到static Beetle.x initialized

接着main调用Beetle的prt()打印得到Beetle constructor

接着new对象,同理必须先初始化父类(例如成员变量,构造方法),于是得到 i = 9, j = 0,之后j在构造方法内被赋值为39

接着初始化子类,初始化Beetle的k成员变量时调用prt(),打印Beetle.k initialized,k赋值为63

最后Beetle的构造方法打印子类的k=63,打印父类的j=39

补充:

Java 允许我们将static初始化工作划分到类内一个特殊的“static 构建从句”(也叫作“静态
块”)里。如下:

class Spoon {
    static int i;
    static {
    i = 47;
}
这不是方法,与其他 static初始化一样,这段代码仅执行一次——首次生成那个类的一个对象时,或者首次访问属于那个类的一个 static 成员时(即便从未生成过那个类的对象)。


清除:

    为清除一个对象,使用对象的用户必须在希望进行清除的地点调用一个清除方法。若程序员忘记了,那么永远不会调用破坏器,我们最终得到的将是一个内存“漏洞”。

    而java没有类似于c++的delete方法,也没有c++的破坏器,而做到简单代替的产物是垃圾收集机制,它能自动的销毁垃圾,但深入了解后它也不能完全代替破坏器机制提供的所有需求。

    对于垃圾收集器的具体工作流程这里不做描述。

Origin教程004:Origin图形导出 需要编辑的话,双击图形,会自动用origin软件打开图形,这种方式是最开始导出图形的功能,方式一和二都是后面增加的。如果导出的图片边距较大的时候,会影响图片的美观,可以通过。也可以设置在PPT中直接编辑,找到。解决方法是,选择一条线, 阅读详情

相关推荐

COT Buck和普通Buck的区别

传统的电流模控制的调制原理,由时钟脉冲信号 clk 的上升沿触发开始一个新的开关周期,d 由低变高,主开关闭合,流过它的电流和电感电流相等,并以固定斜率逐渐增大,直至 iL *Ri 与斜坡补偿信号 se 的和等于控制信号 vc;此时,比较器的输出电平由低变高,导通时间产生器被触发,其输出 d 由低变高,并产生一个固定的导通时间 Ton;然后 PWM 比较器的输出由低变高,导通时间产生器被触发,主开关闭合,电感电流逐渐增大,直到导通时间产生器计满固定的时间 Ton,d 变为低电平,主开关断开,周期结束。

模拟芯片设计 1128

java类的惰性初始化

当使用 “.class” 来创建对Class对象的引用时,不会自动地初始化该Class对象。为了使用类而做的准备工作实际包括三个步骤: 1.加载,这是由类加载器执行的。该步骤将查找字节码(非必须),并从这些字节码中创建一个Class对象。 2.链接。在链接阶段将验证类中的字节码,为静态域分配存储空间,并且如果必需的话,将解析这个类创建的对其他类的所有引用。 3.初始化。如果该类具有超

mwq30123的专栏 3665

避坑指南:用pygrib处理ERA5气象数据时遇到的5个典型问题

本文总结了使用pygrib库处理ERA5气象GRIB数据时常见的五个典型问题及解决方案,涵盖数据获取、内存管理、时间处理、空间插值和性能优化。重点针对气象数据插值这一核心挑战,提供了处理不规则网格、缺失值和跨日期变更线的实用代码示例与优化策略,帮助用户高效、稳定地完成气象数据分析工作。

weixin_28224217的博客 185

第4章 初始化和清除(下)

4.4成员初始化 局部变量在使用之前必须初始化。 package com.sunny.hello.c4; public class Test { void f() { int i; //i++; 编译错误,因为i未初始化 } } 但是,若将基本类型设为一个类的数据成员,情况则会变得稍微有些不同。由于任何方法都可以初...

weixin_30564901的博客 128

遥感大模型之Prithvi的关键技术解读

Prithvi系列模型开创了遥感领域基础模型新范式,通过海量多源时空数据(HLS和SAR)与Vision Transformer架构的深度融合,采用掩码自编码器进行自监督预训练,实现了强大的地球观测表征能力。该技术体系突破传统方法在全局建模、多模态融合和时空分析上的局限,仅需少量标注数据即可在土地分类、灾害监测等任务上取得优异表现。从初代3亿参数到Prithvi-EO-2.0的10亿参数升级,展现了模型可扩展性,为构建地球数字孪生智能基座奠定基础。

panshengwu的博客 866

Synares病毒实战:如何从U盘感染中恢复你的Excel和EXE文件(附专杀工具推荐)

本文详细介绍了Synares感染型病毒的典型特征与传播机制,特别是其通过U盘感染Excel和EXE文件的行为。文章提供了一套从应急隔离、诊断到使用专杀工具进行深度清除与文件恢复的完整实战流程,并推荐了有效的安全软件和修复方法,旨在帮助用户最大程度救回重要数据并构建长效安全防护习惯。

weixin_29230649的博客 1820

《ThinkInJava》第四版读书笔记(小白第一次读,由word导入,内容简略)

1 对象导论 1..1抽象过程 可以认为,人们所能解决的问题的复杂性直接取决于抽象的类型与质量.”命令式语言”所作的主要抽象仍要求在解决问题时要基于计算机结构,而不是基于所要解决的问题的结构来考虑.程序员必须建立起在机器模型(解空间内,你对问题建模的地方,如计算机) AND 实际待解决问题的模型(位于解空间内,这是问题存在的地方,例如计算机) 之间的关联...

lawfree的博客 662

YOLOv8改进:在C2F模块中引入RepGhost Bottleneck模块

C2F类是YOLOv8中的C2F模块的实现,它包含一个RepGhostBottleneck模块、一个卷积层和一个批归一化层。通过在C2F模块中引入RepGhost Bottleneck模块,我们可以在保持计算效率的同时提升模型的表达能力。这是因为RepGhost Bottleneck模块通过引入重复的卷积核来扩展模型的感受野,从而增加了模型对不同尺度目标的感知能力。RepGhost Bottleneck是一种用于卷积神经网络的改进模块,它可以在保持计算效率的同时提升模型的表达能力。希望以上内容对你有帮助!

IlgCrystal的博客 1306

Java编程思想笔记二:初始化与清理

C++ 引入了构造器的概念,这是一个在创建对象时被自动调用的特殊方法。Java 中也采用了构造器,并额外提供了“垃圾回收器”,对于不再使用的内存资源,垃圾回收器能自动将其释放。《Java编程思想》花费大量篇幅介绍了对象的初始化和清理,所以下面的内容也比较多,但其实这些只是关于初始化和清理的冰山一角,后面还会有更深入的内容。

willingdays的博客 605

2023年电工杯 | 2023年电工杯数学建模竞赛思路(A题、B题)

2023年电工杯 | 2023年电工杯数学建模竞赛思路(A题、B题)

前程算法屋的博客 5593

【2024-06-21】网易互娱秋招实习笔试三道编程题解

恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经。作者@TechGuide【全网同名】

试问道几许 1055

Java编程思想之初始化与清理二

构造器初始化 初始化顺序 变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。 静态数据的初始化 static关键字不能应用于局部变量,无论创建多少个对象,静态数据都只占一份存储区域 静态初始化只有在必要时刻才会进行,静态初始化只在Class对象首次加载的时候进行一次 初始化的顺序是先静态对象(如果它们尚未因为前面...

菜园子丶For丨丶Tomorrow的博客 133

大模型测试人员完整学习体系(分层成长路线 + 知识框架 + 落地实操)

本文系统构建了大模型测试工程师的4级能力成长体系:L1(测试执行)-L2(专项测试)-L3(质量体系)-L4(行业标准),详细拆解了每个阶段的核心技能图谱。重点包括:入门层需掌握传统测试基础和大模型产品逻辑;进阶层需精通Prompt用例设计、RAG测试、安全对齐、自动化评测等专项能力;高级层聚焦评测平台搭建与质量体系建设;专家层深入算法对齐与行业标准制定。文章配套提供了分阶段技术工具栈、3-12个月学习路径及5类实战项目建议,形成了一套完整的大模型测试人才能力培养框架。

SmallBull的博客 456

OOP丨《Java编程思想》阅读笔记Chapter 5 : 初始化与清理

Thinking In Java Chapter 5 read note

TheSumSt的经验站 909

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java编程思想第四版——工作心得

所有的问题,我都希望能从书本中找到理论的支撑。我的学习方法,爱读书! 因为一些小问题,导致编译失败,真的是很操蛋的心情。从c++转到java,有个心得就是,能多做点就多做点,否则编译器给你报错误。 1, 局部变量没有初始化导致编译错误。 String file ; 如果后面使用了file的话,而file又没有初始化。则就会报: error: variable file might ...

编程到管理、技术到产品 1138

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

《Java编程思想》读书笔记:第五章 初始化与清理

目录5.1用构造器确保初始化5.2方法重载5.2.1区分重载方法5.2.2涉及基本类型的重载5.2.3以返回值区分重载方法5.3默认构造器5.4this关键字5.4.1在构造器中调用构造器5.4.2static的含义5.5清理:终结处理和垃圾回收5.5.1finalize()的用途何在5.5.2你必须实施清理5.5.3终结条件5.5.4垃圾回收器如何工作5.6成员初始化5.6.1指定初始化5.7构造器初始化5.7.1初始化顺序5.7.2静态数据的初始化5.7.3显示的静态初始化5.7.4非静态实例初始化5.

Mr_Kian的博客 917

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

《JAVA编程思想》学习笔记:第5章(初始化和清理)

目录Java编程思想(一)第1~4章:概述Java编程思想(二)第5章:初始化和清理Java编程思想(三)第6章:访问权限Java编程思想(四)第7章:复用类Java编程思想(五)第8章:多态Java编程思想(六)第9章:接口Java编程思想(七)第10章:内部类Java编程思想(八)第11章:持有对象Java编程思想(九)第12章:异常Java编程思想(十)第13章:字符串Java编程思想(十一...

caobaokang的专栏 1174

《Java编程思想》读书笔记

《Java编程思想》读书笔记读《Java编程思想》的一些心得1、一切皆对象到底存在了什么地方2、操作符3、初始化与清理4、复用类5、接口 读《Java编程思想》的一些心得 ​ 《Java编程思想》,也叫《Thinking in Java》。 ​ 首先,这是一本非常非常非常好的一本书,是值得二刷、三刷、四刷的书。奈何我读书技巧不够,读的太慢,导致我还未读完这本书。但就目前我读完的地方而言,已经是受益颇多,也刷新了我太多的认知。大学的时候,也有学过Java相关的内容,但是老师讲的并不深刻,亦可能是我理解的不

qimowei的博客 784

java编程思想 初始化_《java编程思想》 初始化与清理

1、初始化与清理的重要性:1、许多C程序的错误都源于程序员忘记初始化变量,特别是使用程序库时,如果不知道如何初始化库的构件更容易出错2、当使用完一个元素时,这个元素就不会有什么影响了,所以很容易就会忘记,但是这个元素占用的资源一直存在,如果资源一直得不到释放,就会造成资源(内存)耗尽2、构造器确保初始化:在java中,通过提供构造器,可以确保每个对象都会得到初始化。创建对象时,如果类对象有构造器,...

weixin_29172201的博客 107

学习《java编程思想》笔记之初始化与清理

学习《java编程思想》笔记之初始化与清理 1、构造器,是一个在创建对象时被自动调用的特殊方法,用构造器来确保初始化。构造器是一种特殊类型的方法,因为它没有返回值。例: class Rock(){ Rock(){//This is the constructor} } 2、this可调用一个构造器,但却不能调用两个,此外,必须将构造器调用置于最起始处,否则编译器会报错。 public class Flower{ Flower(int petals){petalCount=petals;} Flower(St

SHEEP__ESP的博客 129

Java编程思想 初始化与清理总结

用构造器确保初始化 在创建对象时: new Rock(); 将会为对象分配存储空间 并调用相应的构造器 方法重载 方法名相同而形式参数不同 区分重载方法 每个重载的方法都必须有一个独一无二的参数类型列表 参数顺序不同也可以区分两个方法 不建议这样做 会使代码难以维护 涉及基本类型的重载 基本类型能从一个 较小 的类型自动提升至一个 较大 的类型 如果传入的数据类型(实际参数类型)小于方法中声明的形...

勤劳的搬运工 300

Java编程思想(二) —— 初始化与清理

操作符一章的

iaiti的专栏 4545

java随笔之类属性的初始化

示例代码 class FieldDemo { FieldDemo(int i){ System.out.println("FieldDemo("+i+")"); }}class CallFieldDemo { static FieldDemo demo3 = new FieldDemo(3); FieldDemo demo4 = new FieldDem

我的青春谁做主 2176

JAVA编程思想笔记 : 初始化与清理

随着计算机革命的发展,"不安全"的编程方式已逐渐成为编程代价高昂的主因之一 用构造器确保初始化 方法重载 任何程序设计语言都具备的一项重要特性就是对名字的运用. 当创建一个对象时,就是给此对象分配到的空间取一个名字. 所谓的方法就是给某个动作取名字. 方法名相同且形式参数不同的构造器. 构造器的名字由类名决定,所以只能有个构造器名字,如何多种方式创建对象....

张伯毅的专栏 719

java中初始化方法

本文主要是讲从《java编程思想》中看到的东西,是第七章复用类的开头内容,主要是类初始化的几种方法的位置,主要包括 1.在定义对象的地方。这意味着他们总是在构造器被调用前被初始化。 2.在类的构造器中 3.在要使用这些对象之前,这种方式称为惰性初始化。在生成对象不值得以及不必每次都生成对象的情况下,这种方式可以减少额外的负担。 4.使用实例初始化。 下面是这四种方式的示例。 1 ...

weixin_30345055的博客 2363

JAVA编程思想第4版读书笔记

原来download了网上一个第1版的Java编程思想,里面讲的还是Java1.0和Java1.1时代的故事。我看到一半,又找到第三版,发现讲的是Java 1.4时代的故事。到第4版,讲Java 1.6。我想现在都到Java 1.8了,这两年该出Java编程思想第5版了吧! 这件事情给我的教训是,看书一定要看最新版,一定要看经典,否则就是浪费时间。 此为引子。

androidTang的博客 1652
上一篇: 简单理解常用设计模式(十二)单例模式
下一篇: demo项目开发笔录(问题记录)
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值