Java中的构造方法总结
Java中的构造方法总结
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class Sample { private int x; public Sample() { // 不带参数的构造方法 this ( 1 ); } public Sample( int x) { //带参数的构造方法 this .x=x; } public int Sample( int x) { //不是构造方法 return x++; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class Mystery { private String s; public void Mystery() { //不是构造方法 s = "constructor" ; } void go() { System.out.println(s); } public static void main( String [] args) { Mystery m = new Mystery(); m.go(); } } |
1
2
3
4
5
6
7
8
9
|
public class Sample1{} public class Sample2{ public Sample2( int a){System.out.println( "My Constructor" );} } public class Sample3{ public Sample3(){System.out.println( "My Default Constructor" );} } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class Platypus { String name; Platypus( String input) { name = input; } Platypus() { this ( "John/Mary Doe" ); } public static void main( String args[]) { Platypus p1 = new Platypus( "digger" ); Platypus p2 = new Platypus(); System.out.println(p1.name + "----" + p2.name); } } |
需要注意的两个地方是:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class getBirthInfo { void getBirthInfo() { System.out.println( "born alive." ); } } class Platypus1 extends getBirthInfo { void getBirthInfo() { System.out.println( "hatch from eggs" ); System.out.println( "a mammal normally is " ); super .getBirthInfo(); } } public class test1 { public static void main( String [] args) { Platypus1 p1= new Platypus1(); p1.getBirthInfo(); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class getBirthInfo { getBirthInfo(){ System.out.println( "auto" ); } void aa() { System.out.println( "born alive." ); } } class Platypus1 extends getBirthInfo { Platypus1() { super (); System.out.println( "hatch from eggs" ); System.out.println( "a mammal normally is " ); } } public class test1 { public static void main( String [] args) { Platypus1 p1= new Platypus1(); } } |
类的继承机制使得子类可以调用父类的功能,下面介绍类在继承关系的初始化顺序问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class SuperClass { SuperClass() { System.out.println( "SuperClass constructor" ); } } public class SubClass extends SuperClass { SubClass() { System.out.println( "SubClass constructor" ); } public static void main( String [] args) { SubClass sub = new SubClass(); } } |
SubClass constructor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class SuperClass { SuperClass( String str) { System.out.println( "Super with a string." ); } } public class SubClass extends SuperClass { SubClass( String str) { System.out.println( "Sub with a string." ); } public static void main( String [] args) { SubClass sub = new SubClass( "sub" ); } } |
Sub with a string. 第二种方法即使父类中有显示的默认构造方法也不会被调用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class One { One( String str) { System.out.println(str); } } class Two { One one_1 = new One( "one-1" ); One one_2 = new One( "one-2" ); One one_3 = new One( "one-3" ); Two( String str) { System.out.println(str); } } public class Test { public static void main( String [] args) { System.out.println( "Test main() start" ); Two two = new Two( "two" ); } } |
one-1
one-2
one-3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
class One { One( String str) { System.out.println(str); } } class Two { One one_1 = new One( "one-1" ); One one_2 = new One( "one-2" ); static One one_3 = new One( "one-3" ); Two( String str) { System.out.println(str); } } public class Test { public static void main( String [] args) { System.out.println( "Test main() start" ); Two two_1 = new Two( "two-1" ); System.out.println( "------------" ); Two two_2 = new Two( "two-2" ); } } |
one-3
one-1
one-2
two-1
------------
one-1
one-2
two-2
结论:如果一个类中有静态对象,那么他会在非静态对象初始化前进行初始化,但只初始化一次。而非静态对象每次调用时都要初始化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
class One { One( String str) { System.out.println(str); } } class Two { One one_1 = new One( "one-1" ); One one_2 = new One( "one-2" ); static One one_3 = new One( "one-3" ); Two( String str) { System.out.println(str); } } public class Test { static Two two_3 = new Two( "two-3" ); public static void main( String [] args) { System.out.println( "Test main() start" ); Two two_1 = new Two( "two-1" ); System.out.println( "------------" ); Two two_2 = new Two( "two-2" ); } } |
one-1
one-2
two-3
Test main() start
one-1
one-2
two-1
------------
one-1
one-2
two-2
2.主类的父类的构造方法被调用。
3.主类的非静态对象(变量)初始化。
4.调用主类的构造方法。
Java中的构造方法总结的更多相关文章
- Java学习笔记十六:Java中的构造方法
Java中的构造方法 1.使用new+构造方法 创建一个新的对象: 2.构造方法是定义在Java类中的一个用来初始化对象的方法: 3.构造方法与类同名且没有返回值: 4.语法格式: public 构造 ...
- Java中的构造方法
什么是构造方法:每一个类中至少有一个构造方法,它用于创建该类对象,这个和OC中的init有异曲同工之妙. 构造方法的格式:A:方法名与类名相同 B:没有返回值类型,没有void C:没有具体的返回值 ...
- Java面试 - 在Java中, 既然构造方法是一个方法,那么为什么不使用void 定义呢?
Java程序编译器是根据代码结构来进行编译处理的,执行的时候也是根据代码结构来处理的. 如果在构造方法上使用void,那么此结构就会与普通方法的结构相同,这样编译器会认为此方法是一个 普通方法,而普通 ...
- java中的构造方法与其作用
什么是构造方法呢? 方法名和类名相同 没有返回值类型,连void都不能写 没有具体的返回值 构造方法分为无参构造方法与有参构造方法. 先来看一下最简单的无参构造方法: Student.java pac ...
- java中的构造方法(2013-05-05-bd 写的日志迁移
特点: 1.方法名和类名相同 2.没有返回值 3.在创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的初始化 一个类中可以定义多个不同构造方法: 如果程序员没有定义构造方法,系统能够会 ...
- 134、Java中的构造方法和构造块
01.代码如下: package TIANPAN; class Book { public Book() { // 构造方法 System.out.println("[A]Book类的构造方 ...
- Java 中的构造方法
首先创建一个Transport类,定义好类的属性和方法,并且写好构造方法,先看下无参数的构造方法: public class Transport { //名字 public String name; ...
- Java中的构造方法「注意事项」
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是调用构造方法. 语法: public 类名称(参数类型 参数名称){ 方法体 } 注意事项: 构造方法的名称必须和所在的类 ...
- 关于Java中的构造方法
关于构造方法: 1.构造方法又叫构造函数/构造器. 2.构造方法语法结构中"返回值类型"不需要指定,也不能写void,如若写void,则变成普通方法. 3.构造方法有返回值,和当前 ...
随机推荐
- 如何将dom4j的jar包放到java项目中
---恢复内容开始--- 如果你建的是java project项目的话,那就通过Myeclispe中的右键你的项目名称,选择build path ->config build path... 然 ...
- eclipsec常用快捷键
Eclipse常用快捷键 1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2 显示搜索 ...
- 对map参数进行排序
/** * Map转换成url参数 by csl * * @param map * @param isSort 是否排序 * @return */ ...
- 分水岭分割算法(watershed segmentation)的C++实现(法1)
运行环境:ubuntu16.04+Qt+opencv2.4.13 参考链接:http://blog.csdn.net/u010741471/article/details/45193521 water ...
- GPU编程自学5 —— 线程协作
深度学习的兴起,使得多线程以及GPU编程逐渐成为算法工程师无法规避的问题.这里主要记录自己的GPU自学历程. 目录 <GPU编程自学1 -- 引言> <GPU编程自学2 -- CUD ...
- [置顶]
kubernetes1.7新特性:日志审计变化
背景概念 出于安全方面的考虑,Kubernetes提供了日志审计记录,用来记录不同普通用户.管理员和系统中各个组件的日志信息. Kubernetes日志审计是Kube-apiserver组件的一部分功 ...
- 将海康大华等网络摄像机RTSP流进行网页Flash rtmp和H5 hls直播的技术方案
前言 再小的技术点也会有他的市场! 一直以来,都有一些不被看好,认为是成本太高,无法大规模展开的软件和产品形态,就好比每一座城市都会有他的著名小吃一样,即使是慕名而来的人源源不断,受众群体也总是有限, ...
- Android逆向之旅---Android中锁屏密码算法解析以及破解方案
一.前言 最近玩王者荣耀,下载了一个辅助样本,结果被锁机了,当然破解它很简单,这个后面会详细分析这个样本,但是因为这个样本引发出的欲望就是解析Android中锁屏密码算法,然后用一种高效的方式制作锁机 ...
- [Linux] 使用rename批量重命名文件
例如把所有png文件的后缀改为jpg $ rename 's/png/jpg/' *png
- BZOJ3688 折线统计【树状数组优化DP】
Description 二维平面上有n个点(xi, yi),现在这些点中取若干点构成一个集合S,对它们按照x坐标排序,顺次连接,将会构成一些连续上升.下降的折线,设其数量为f(S).如下图中,1-&g ...