Suche senden
Hochladen
5, initialization & cleanup
•
0 gefällt mir
•
283 views
ted-xu
Folgen
About java object initialization and cleanup
Weniger lesen
Mehr lesen
Melden
Teilen
Melden
Teilen
1 von 18
Empfohlen
JAVA内存泄漏及诊断
JAVA内存泄漏及诊断
ivannotes
12, string
12, string
ted-xu
Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法
crasysatan
JavaScript 闭包分享(一):传递参数
JavaScript 闭包分享(一):传递参数
Janlay Wu
Java Script 引擎技术
Java Script 引擎技术
bigqiang zou
Ecmascript
Ecmascript
jay li
例外處理
例外處理
Justin Lin
Empfohlen
JAVA内存泄漏及诊断
JAVA内存泄漏及诊断
ivannotes
12, string
12, string
ted-xu
Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法
crasysatan
JavaScript 闭包分享(一):传递参数
JavaScript 闭包分享(一):传递参数
Janlay Wu
Java Script 引擎技术
Java Script 引擎技术
bigqiang zou
Ecmascript
Ecmascript
jay li
例外處理
例外處理
Justin Lin
從模組到類別
從模組到類別
Justin Lin
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
zhangdaiping
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法
yiditushe
Sun java
Sun java
softwaredesigner
JavaScript 教程
JavaScript 教程
Bobby Zhou
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
hoopchina
流程語法與函式
流程語法與函式
Justin Lin
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
jay li
Scala再探
Scala再探
afeihehe
Scala function-and-closures
Scala function-and-closures
wang hongjiang
functional-scala
functional-scala
wang hongjiang
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
Sheng-Han Su
Jasmine2
Jasmine2
tb-vertical-guide
進階主題
進階主題
Justin Lin
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Justin Lin
Java华为面试题
Java华为面试题
yiditushe
Node way
Node way
Ethan Zhang
Javascript share
Javascript share
Xu Mac
PHP
PHP
Ht Wang
Js的国(转载)
Js的国(转载)
Leo Hui
[중소기업청]뚜따 회사소개서
[중소기업청]뚜따 회사소개서
startupkorea
1, linux intro
1, linux intro
ted-xu
Weitere ähnliche Inhalte
Was ist angesagt?
從模組到類別
從模組到類別
Justin Lin
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
zhangdaiping
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法
yiditushe
Sun java
Sun java
softwaredesigner
JavaScript 教程
JavaScript 教程
Bobby Zhou
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
hoopchina
流程語法與函式
流程語法與函式
Justin Lin
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
jay li
Scala再探
Scala再探
afeihehe
Scala function-and-closures
Scala function-and-closures
wang hongjiang
functional-scala
functional-scala
wang hongjiang
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
Sheng-Han Su
Jasmine2
Jasmine2
tb-vertical-guide
進階主題
進階主題
Justin Lin
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Justin Lin
Java华为面试题
Java华为面试题
yiditushe
Node way
Node way
Ethan Zhang
Javascript share
Javascript share
Xu Mac
PHP
PHP
Ht Wang
Js的国(转载)
Js的国(转载)
Leo Hui
Was ist angesagt?
(20)
從模組到類別
從模組到類別
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法
Sun java
Sun java
JavaScript 教程
JavaScript 教程
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
流程語法與函式
流程語法與函式
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
Scala再探
Scala再探
Scala function-and-closures
Scala function-and-closures
functional-scala
functional-scala
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
Jasmine2
Jasmine2
進階主題
進階主題
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Java华为面试题
Java华为面试题
Node way
Node way
Javascript share
Javascript share
PHP
PHP
Js的国(转载)
Js的国(转载)
Andere mochten auch
[중소기업청]뚜따 회사소개서
[중소기업청]뚜따 회사소개서
startupkorea
1, linux intro
1, linux intro
ted-xu
FDA
FDA
Iris He
13, io
13, io
ted-xu
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
Koki Kusano
How to install Firmware on Eurosat P6 HD Set Top Box
How to install Firmware on Eurosat P6 HD Set Top Box
Eurosat
F-commerce to E-commerce conversion
F-commerce to E-commerce conversion
Moshiur Monty
CIO Event - Info vista - Application Transformation
CIO Event - Info vista - Application Transformation
Global Business Intel
10 Factors of Ranking a YouTube Video
10 Factors of Ranking a YouTube Video
Moshiur Monty
Vencomatic company introduction
Vencomatic company introduction
nielsgeraerts
Andere mochten auch
(10)
[중소기업청]뚜따 회사소개서
[중소기업청]뚜따 회사소개서
1, linux intro
1, linux intro
FDA
FDA
13, io
13, io
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
How to install Firmware on Eurosat P6 HD Set Top Box
How to install Firmware on Eurosat P6 HD Set Top Box
F-commerce to E-commerce conversion
F-commerce to E-commerce conversion
CIO Event - Info vista - Application Transformation
CIO Event - Info vista - Application Transformation
10 Factors of Ranking a YouTube Video
10 Factors of Ranking a YouTube Video
Vencomatic company introduction
Vencomatic company introduction
Ähnlich wie 5, initialization & cleanup
2, object oriented programming
2, object oriented programming
ted-xu
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
Ho Kim
Free Marker中文文档
Free Marker中文文档
yiditushe
學好 node.js 不可不知的事
學好 node.js 不可不知的事
Ben Lue
02 Objective-C
02 Objective-C
Tom Fan
C++中级培训胶片
C++中级培训胶片
ff1
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
Liu Allen
前端测试
前端测试
frontwindysky
前端测试
前端测试
Zheng Biao
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用
FLASH开发者交流会
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
czzz1
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
Ho Kim
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection
ArBing Xie
快速了解PostgreSQL
快速了解PostgreSQL
正中 周
线程与并发
线程与并发
Tony Deng
Javascript之昨是今非
Javascript之昨是今非
Tony Deng
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门
Lucien Li
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门
Lucien Li
11, exceptions
11, exceptions
ted-xu
Js培训
Js培训
yiditushe
Ähnlich wie 5, initialization & cleanup
(20)
2, object oriented programming
2, object oriented programming
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
Free Marker中文文档
Free Marker中文文档
學好 node.js 不可不知的事
學好 node.js 不可不知的事
02 Objective-C
02 Objective-C
C++中级培训胶片
C++中级培训胶片
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
前端测试
前端测试
前端测试
前端测试
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection
快速了解PostgreSQL
快速了解PostgreSQL
线程与并发
线程与并发
Javascript之昨是今非
Javascript之昨是今非
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门
11, exceptions
11, exceptions
Js培训
Js培训
Mehr von ted-xu
11, OCP - awr & alert system
11, OCP - awr & alert system
ted-xu
10, OCP - flashback
10, OCP - flashback
ted-xu
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
ted-xu
8, OCP - backup with rman
8, OCP - backup with rman
ted-xu
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
ted-xu
6, OCP - oracle security
6, OCP - oracle security
ted-xu
5, OCP - oracle storage
5, OCP - oracle storage
ted-xu
4, OCP - oracle networking
4, OCP - oracle networking
ted-xu
3, OCP - instance management
3, OCP - instance management
ted-xu
2, OCP - installing and creating a database
2, OCP - installing and creating a database
ted-xu
1, OCP - architecture intro
1, OCP - architecture intro
ted-xu
12, OCP - performance tuning
12, OCP - performance tuning
ted-xu
7, business event system
7, business event system
ted-xu
6, workflow miscellaneous
6, workflow miscellaneous
ted-xu
5, workflow function activity
5, workflow function activity
ted-xu
4, workflow tables & api
4, workflow tables & api
ted-xu
3, workflow in ebs
3, workflow in ebs
ted-xu
2, a simple workflow
2, a simple workflow
ted-xu
1, workflow intro
1, workflow intro
ted-xu
8, bes tables & api
8, bes tables & api
ted-xu
Mehr von ted-xu
(20)
11, OCP - awr & alert system
11, OCP - awr & alert system
10, OCP - flashback
10, OCP - flashback
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
8, OCP - backup with rman
8, OCP - backup with rman
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
6, OCP - oracle security
6, OCP - oracle security
5, OCP - oracle storage
5, OCP - oracle storage
4, OCP - oracle networking
4, OCP - oracle networking
3, OCP - instance management
3, OCP - instance management
2, OCP - installing and creating a database
2, OCP - installing and creating a database
1, OCP - architecture intro
1, OCP - architecture intro
12, OCP - performance tuning
12, OCP - performance tuning
7, business event system
7, business event system
6, workflow miscellaneous
6, workflow miscellaneous
5, workflow function activity
5, workflow function activity
4, workflow tables & api
4, workflow tables & api
3, workflow in ebs
3, workflow in ebs
2, a simple workflow
2, a simple workflow
1, workflow intro
1, workflow intro
8, bes tables & api
8, bes tables & api
5, initialization & cleanup
1.
Initialization & Cleanup
2.
Agenda •
概述 • 构造器命名 & 默认构造器 • 含参数构造器 • this关键字 • RE - static关键字 • 垃圾回收 - 引用计数&内存泄露 • 垃圾回收 - finalize方法 • 垃圾回收 - System.gc() • static块 • non-static块 • 变长参数 • 枚举类型
3.
概述 • 初始化和清理是仸何编程语言中都需要处
理的两个问题, 正确的初始化保证了对象能 够被使用, 而清理则确保了不被使用的对象 被回收, 与之相关的内存/文件操作符等系统 资源也会释放; • 在Java中, 对象的初始化沿用了C++中的构造 器(Constructor)方式, 并且引入了垃圾回收 (Garbage Collect)机制来实现对象的回收.
4.
构造器的命名
&默认构造器 • Java中构造器(constructor)的命名与类名相同, 可以有多 个构造器(重载), 只是这些构造器的参数不同; 示例: Class Rock { Rock() { System.out.println(“This is Rock”); } } • 无参构造器在java被称为默认构造器(default constructor), 如果一个类没有定义任何构造器, 则会自动引入一个默 认构造器. • 构造器的命名不遵循”方法的第一个字母小写”的编码风 格; • 示例: demo/Demo1.java
5.
带参数构造器 • Java中构造器与方法一样也可以指定形参.
示例: class Rock { Rock (int i) { System.out.print("Rock " + i + " "); } } • 示例: demo/Demo2.java
6.
this关键字 •
访问某个对象上的属性或方法时, Java会默认传入该对象的引用; 可以使用 this关键字访问该对象的引用, this可以理解为”当前对象”. 示例: Class Demo { int String name = “Bosh”; private void sayHello() { System.out.println(name); // 等价于this.name } public void say() { /**比如Demo demo = new Demo(); demo.say(); **this即表示demo **/ sayHello(); // 等价于this.sayHello() } } • 可以看到this关键字并不是必须的, 但是在某些特殊的情况下必须使用该 关键字, 比如: public void setName(String name) { this.name = name; // name是对象的属性, 这里使用输入的参数进行赋值 } • this指向的是对象, 不能使用在static方法中, 因为调用static方法不需要创建 对象. • 示例: demo/Demo4.java
7.
this关键字
构造器调用 • this关键字可以用于调用另一个构造器, 这样的好处在于避免了重复代码, 符合DRY原则. 示例: Flower(int petals) { // 构造器1 petalCount = petals; print("Constructor w/ int arg only, petalCount= " + petalCount); } Flower(String ss) { // 构造器2 print("Constructor w/ String arg only, s = " + ss); s = ss; } Flower(String s, int petals) { // 构造器3 this(petals); // 调用构造器1 print("String & int args"); } Flower() { this("hi", 47); // 调用构造器3 print("default constructor (no args)"); } • this构造器的调用必须是构造器方法体中的第一条语句, 并且只能有一次 this调用, 否则会爆出编译错误; • 示例: demo/Demo5.java
8.
RE - static关键字 •
static可以理解为non-this, 因为不需要创建 对象; 在static方法中不能调用non-static方法, 反之在non-static方法中则可以调用static方 法; • static被认为是non-OOP的, 如果你的设计中 出现了过多的static那么应该重新思考你的 设计了.
9.
垃圾回收
引用计数 & 内存泄露 • Java中的垃圾回收(GC)是基于引用计数机制的, 所谓引用计数是指Java 会自动计算指向所有对象的引用的个数, 如果某个对象的引用计数为0, 那么该对象将在JVM下一次的GC操作中被释放; • Java中的内存泄露(Memory Leak)不同于C++, 后者是指没有调用对象的 destructor方法导致不再被使用对象的内存没有被释放; Java的内存泄 露是指对象仍然是可访问的(引用计数大于0), 但是不会被使用. 示例: Vector v=new Vector(10); for (int i=1;i<100; i++) { Object o=new Object(); v.add(o); o=null; // 虽然o不再指向Object对象, 但v然保存了这些对象的引 // 用如果v不再被使用那么这些Object对象就造成了内存泄露 } Solution: 设置v=null; 可以避免这里的内存泄露问题
10.
垃圾回收
finalize方法 • finalize方法定义在Object类中, 子类可以覆 盖该方法实现资源的释放, 该方法在对象被 垃圾回收(GC)之前被调用; • 但是尽量不要依赖finalize方法来实现对内存 等资源的释放, GC会处理好这一切. 如果需 要释放比如文件句柄, 数据库连接等资源则 应当编写相应的方法.
11.
垃圾回收
System.gc() • 可以调用System.gc()来提示JVM进行垃圾回 收, 但是该调用不能保证GC操作被立即执行; 建议是如果基于JVM内存调优需要永远不要 调用此方法, 而应该从其他方面进行调优; • Runtime.getRuntime().gc()调用等价于 System.gc()
12.
成员初始化 • 类成员的初始化区分于static成员和非static成员: 前
者在该类被加载时初始化, 之后不会再次初始化; 后 者在每次创建对象时(new)初始化; • 对象成员的初始化分为两步: 1, 执行成员声明语句的初始化, eg: private int i = 1; // 声明成员i, 在创建对象时首先执行初始化操作 注意: 在成员声明语句中可以不指定初始值, 将会使用默认值 进行初始化, 参考: demo/Demo6.java 2, 执行构造函数中的成员初始化操作, 在构造函数中可 以对成员进行初始化 • 示例: demo/Demo7.java • 示例: demo/Demo8.java
13.
static块 • static块的执行时机与static成员的初始化相
同, 都是在被加载时执行; 写法: static { ...... } • 示例: demo/Demo9.java
14.
non-static块 • Java提供了非static块用于实现对非static成
员的初始化, 写法: {......} ; 相比static块是没 有static关键字. • 示例: demo/Demo10.java
15.
变长参数 • JDK5对方法的变长参数提供了支持, eg: //
方法声明 void printArray(Object... args) // 调用 printArray(47, 3.14F, 11.11); printArray("one", "two", "three"); printArray(new A(), new A(), new A()); printArray((Object[])new Integer[]{ 1, 2, 3, 4 }); printArray(); // Empty list is OK • 示例: demo/Demo11.java
16.
变长参数
可选参数 • 可以看到, 变长参数是允许为空的, 这就为可 选参数的实现提供了一种方式, eg: void f(int required, String... trailing) // trailing可选 • 示例: demo/Demo12.java
17.
枚举类型
Enumerated Type • JDK5引入了枚举类型用于定义枚举值, eg: public enum Spiciness { NOT, MILD, MEDIUM, HOT, FLAMING } • 如何使用? 1, 赋值 Spiciness howHot = Spiciness.MEDIUM; 2, print System.out.println(howHot); // 输出MEDIUM 3, 顺序 howHot.oridnal(); // 返回2, 从0开始 4, 使用在switch语句中 Spiciness degree ...; switch(degree) { case NOT: System.out.println("not spicy at all."); break; ...... default: System.out.println("maybe too hot."); } • 示例: demo/Demo13.java
18.
END