java中自动插入一个默认的构造函数,这到底怎么回事?

1.2 当没有任何构造函数,java编译器,会插入一个默认的构造函数   (视频下载) (全部书籍)

见下面的例子:

本章源码

class Line {
    double x = 0.02;
    double y;
}

public class Test {
    public static void main(String[] args) {
        Line c = new Line();
        System.out.println(c.x);
        System.out.println(c.y);

}
}

结果:

0.02
0.0

编译器会把上面的代码先变成如下的形式,注意: 插入一个缺省的构造函数。里面什么也没干。

本章源码

class Circle1 {
    double x = 0.02;
    double y;
    public Circle1(){
    }
}

public class Test {
    public static void main(String[] args) {
        Circle1 c = new Circle1();
        System.out.println(c.x);
        System.out.println(c.y);

}
}

结果:

0.02

0.0

解释一下上面的例子@马克-to-win:实验表明:最开始x=0,且y=0,后来执行构造函数之前,系统先用double x=0.02; double y=0;赋值, 之后再用构造函数的方法最后赋值。如构造函数中什么都没做就用系统开始的赋值。 

类其中的变量为final时的用法:  (视频下载) (全部书籍)

类当中final变量没有初始缺省值,必须在构造函数中赋值或直接当时赋值。否则报错。

public class Test {
    final int i;
    Test(){
        i=3;
    }
    public static void main(final String[] args) {
        Test t=new Test();
        System.out.println("i = " + t.i);
    }
}

结果:

i = 3

或者
public class Test {
    final int i=9;
    public static void main(final String[] args) {
        Test t=new Test();
        System.out.println("i = " + t.i);
    }
}
结果:
i = 9
详情请见:http://www.mark-to-win.com/index.html?content=JavaBeginner/javaUrl.html&chapter=JavaBeginner/JavaBeginner2_web.html#InsertDefaultConstructor

原文地址:https://www.cnblogs.com/mark-to-win/p/9690785.html

时间: 2024-10-29 06:04:34

java中自动插入一个默认的构造函数,这到底怎么回事?的相关文章

Java中的几种默认

1.每个类都默认导入 import java.lang.*; 2.如果一个类没有定义构造方法,则默认提供公开无参构造方法 3.在类中,访问成员变量或成员方法,如果不加引用,默认加上"this." 4.在构造方法中,如果第一行不是"this(...)"或"super(...)" ,默认为"super();" 5.在接口中,属性默认为public static final 方法默认为public abstract 6.如果一个类没

Java中如何判断一个double类型的数据为0?

Java中如何判断一个double类型的数据为0 其实这个问题很简单,只是很多时候考虑复杂了,直接用==判断即可.下面给出测试例子: /**  * 如何判断一个double类型的数据为0  *  * @author leizhimin 2014/8/27 10:31  */ public class Test4 {     public static void main(String[] args) {         double x = 0.00000000000000000;       

在java中如何创建一个内存泄露

今天访问java 并发编程网,看到一个翻译征集令,并发编程网的作者从stackoverflow 网站上选取了一些经典问答,遂决定翻译几篇 征集令地址:http://ifeve.com/stackoverflow-assembly/ 翻译系列文章: 1.Java 核心类库中的一些设计模式 2. hashMap 与hashTable之间的区别 3.  在java中如何创建一个内存泄露 译文: 在java中如何创建一个内存泄露 问题: 我之前参加了一个面试, 被问到在java中如何创建一个内存泄露.不

java中如何实现一个优美的equals方法

java中的任何类都从老祖宗Object中集成了equals方法,在编程实践中应用使用equals方法判断两个对象是否相同的场景无处不在,所以我们在实现自己的类是必须重写出一个优美的equals方法. 首先让我们来看看java语言规范中对equals方法的说明,一个equals方法应当满足如下几个特性: 自反性,对任何一个非空的引用x,x.equals(x)必须返回true: 对称性,对任何引用x和y来说,如果x.equals(y)返回true,那么y.equals(x)也必须返回true: 传

Java中如何查看一个类依赖的包

Java中如何查看一个类依赖的包 如图, 我如何知道JSONArray是依赖的哪一个包呢,这里有两个json-lib包? ? 测试语句: ? public static void main(String[] args) { ????????ProtectionDomain pd = JSONArray.class.getProtectionDomain(); ????????CodeSource cs = pd.getCodeSource(); ????????System.out.printl

在java中随机生成一个无序且长度不大于10的字符串

package xiangmu; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; public class TestCollection { /* * 通过定义Collections.sort()方法对String泛型进行List排序 * 创建一个String泛型List,插入一个不超过10的随机字符串 */ /** * @param

Java中自动装箱与拆箱详解

在讲装箱与拆箱之前我们要先了解一下这个问题的来源: Java中的类型分为基本类型(Primitive type)和类类型(Class type)两种: 基本类型包括byte型.char型.short型.int型.long型.float型.double型.boolean型八种.基本类型指的是直接包含值得类型,可提供语言级别的支持. 类类型包括Byte.Character.Short.Integer.Long.Float.Double.Boolean.为什么要用类类型呢?原因其实很简单,因为Java

七、如何在Java中高效检查一个数组是否含有一个值

如何检查一个数组(非排序的)是否包含特定的值.这是个非常有用或经常被在Java中使用.这是个在Stack Overflow中高得票的问题.在已经高得票的答案中,有许多不同的处理方法,但是时间的复杂度非常不同.在下面,我将会展示每种方法的时间花费. 一.四种不同的方法去检查一个数组包含特定的值 1) 用List public static boolean useList(String[] arr, String targetValue) { return Arrays.asList(arr).co

Java基础---Java中自动类型转换(七)

Java中的自动类型转换 在 Java 程序中,不同的基本数据类型的数据之间经常需要进行相互转换.例如: , 代码中 int 型变量 score1 可以直接为 double 型变量 score2 完成赋值操作,运行结果为: 这种转换称为自动类型转换. 当然自动类型转换是需要满足特定的条件的: 1.  目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型 2.  目标类型大于源类型,如 double 类型长度为 8 字节, int 类型为 4 字节,