this关键字:
this在程序中的三种常见用法:
1)通过this关键字可以明确的去访问类的成员变量,而避免了与局部变量名称冲突的问题
2)调用成员方法
3)可以在一个构造方法中用this调用另一个构造方法(但要位于第一行)
69
class Person(){
Person(){
System.outprintln("freosa");
}
Person(int i ){
this();
System.out.println("mad max");
}
}
public class Example01{
public static void main(String[] args){
Person p = new Person(22);
}
垃圾回收:
System.gc()
finalize()---被内存释放掉之前调用
class Person {
public void finalize(){
System.out.println("啊!!我被当垃圾回收了!!不要啊!!我会回来的");
}
}
public class Example02 {
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
p1 = null;
p2 = null;
System.gc();
for(int i = 0 ; i <10000000 ; i++){
}
}
}
之前就接触过单例模式,即无法直接new
Calendar c = Calendar.getInstance()
DateFormat df = DateFormat.getDateFormat();
有两种实现方法:
class Single {
private Single(){} //用private修饰构造方法,使外部类不能实例化Single类
private static Single INSTANCE = new Single(); //使用静态变量INSTANCE来引用该类的唯一实例对象
public static Single getINSTANCE(){ //静态方法让外界能获取到这唯一的实例对象
return INSTANCE;
}
}
检验:
public class Example03{
public static void main(String[] args){
Single s1 = Single.getINSTANCE();
Single s2 = Single.getINSTANCE();
System.out.println(s1 == s2);
}
}
结果为true
第二种实现单例模式的方式:
class Single {
private Single() {}
public static final Single INSTANCE = new Single();
}
Single s = Single.INSTANCE;
内部类
成员内部类,静态内部类,方法内部类
成员内部类:
特点:内部类可以在外部类被使用,并能使用外部类的成员
但如果非外部类要实例化这个内部类,那么格式就有点奇怪了:
Outer.Inner inner = new Outer().new Inner();
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
例子:
public class Outer {
int num = 4;
public void test(){
Inner inner = new Inner();
inner.shout();
}
class Inner {
public void shout(){
System.out.println("num="+num);
}
}
}
public class Example04 {
public static void main(String[] args){
Outer outer = new Outer();
outer.test();
}
}
静态内部类:
与成员内部类的区别:
1)可以不用实例化外部类就可以得到实例对象
格式:
外部类名.内部类名 变量名 = new 外部类名.内部类名()
对比一下:
Outer.Inner inner = new Outer().new Inner();
Outer.Inner inner = new Outer.Inner();
2)静态内部类只能访问外部类的静态成员
(注意:在静态内部类中可以定义静态的成员,在非晶态的内部类(成员和方法)不能)
方法内部类:
指在成员方法中定义的类,它只能在当前的方法中被使用。
它也可以访问外部类的成员变量
class Outer {
public void test() {
class Inner{
public void inner(){
System.out.println("freriosa");
}
}
Inner i = new Inner();
i.inner();
}
}
/**
*Title类:Person类<br>
*Description:通过Person类来说明java的文档注释<br>
*Company:Freedom.inc
*@author:morton
*@version:1.0
*/
public class Person {
public String name;
/**
*这是Person类的构造方法
*@param name Person的名字
*/
public Person(String name){
//执行语句;
}
/**
*这是read()方法的说明
*@param bookName 读的书的名字
*@param time 读书的时间
*/
public void read(String bookName , int time){
//代码体(执行语句)
}