黑马程序员:Java对象的初始化过程
来源:互联网 发布:长虹led32538数据 编辑:程序博客网 时间:2024/06/04 17:52
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
说Java对象的初始化过程之前,先说说如何禁止类建立对象?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class
Demo
{
private
int
x;
private
Demo(){}
//出现错误的原因,默认构造函数被自定义且被private修饰
Demo(
int
x)
{
this
.x = x;
}
void
show()
{
System.out.println(x);
}
}
class
NoDemo
{
public
static
void
main(String[] args)
{
new
Demo();
//出现错误,若注释掉则程序无异常
new
Demo(
3
).show();
}
}
终端返回的错误:
NoDemo.java:18: 错误: 找不到符号
new Demo();
^
符号: 构造器 Demo()
位置: 类 Demo
1 个错误
总结:若默认构造函数被自定义且被private修饰,则不可以创建类似new Demo()对象,除非类中自定义了其他构造函数,那么调用者就可以创建对应构造函数的对象了。若无其他自定义构造函数或调用者未知,就相当于这个类不可以创建对象
下面进入正题:
Java对象的初始化过程
如:PersonTwo p = new PersonTwo();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class
PersonTwo
{
String name =
"lisi"
;
//显示初始化优先于构造代码块
{
//若显示初始化不优先,则这句构造代码块应该出错,而实际是正常运行
System.out.println(name);
}
}
class
PersonDemoTwo
{
public
static
void
main(String[] args)
{
PersonTwo p =
new
PersonTwo();
//结果输出 lisi
}
}
运行顺序如下:
- new用到了PersonTwo.class,所以会先找到PersonTwo.class文件并加载到内存中
- 执行该类中的static代码块,如果有的话,给PersonTwo.class类进行初始化
- 在堆内存中开辟空间,分配内存地址
- 在堆内存中建立对象的特有属性(成员变量),并进行默认初始化
- 对属性进行显示初始化
- 对对象进行构造代码块初始化
- 对对象进行对应的构造函数初始化
- 将内存地址付给桟内存中的p变量。
- 黑马程序员:Java对象的初始化过程
- 黑马程序员-对象的初始化过程详解
- 黑马程序员_对象的初始化过程
- 黑马程序员-对象的初始化过程
- 黑马程序员----对象的初始化过程
- 黑马程序员-对象的初始化过程
- 黑马程序员--03.Java面向对象--04.【对象初始化的过程】【对象调用成员的过程】
- 黑马程序员--03.Java面向对象--05.子类对象初始化的过程【个人总结】
- 黑马程序员笔记:Java基础知识之对象初始化过程
- 黑马程序员--java中父类和子类都有构造方法时,子类对象的初始化过程
- 黑马程序员_对象初始化过程
- 黑马程序员——Java程序的初始化过程详解
- 黑马程序员—Java类与对象的初始化
- 黑马程序员-java内存结构和对象创建的过程
- JAVA对象的初始化过程
- java对象的初始化过程
- JAVA 的对象初始化过程
- JAVA 对象的初始化过程
- listView 单选项
- 使用Ant打包android程序
- javaScript函数调用传参本质-引用传递参数? 错错错!
- 数据库中in和exists关键字的区别
- 关于get_magic_quotes_gpc()函数(交互数据转义的判断)
- 黑马程序员:Java对象的初始化过程
- KindEditor编辑器 用法
- Java HashCode
- android几种对话框
- [转]Android JNI作用及其详解
- "mkimage" command not found - U-Boot images will not be built
- SVN+网站服务器同步更新
- 浅谈内存泄漏
- 数据结构算法新解(一)————概论 与 算法分析大O阶计算方法