this关键字
this在java中表示出以下的概念:
·调用类中的属性:this.属性
·调用类中的方法:this.方法
·调用类中的构造方法:this()
·表示当前对象:this
父类没有默认构造函数的话,子类必须显示地用super方法调用父类带有参数的构造函数,
如果父类有默认的构造函数,则子类在编译是自动加上了super()
private 属性不能被外部直接访问,只能在内部可见,利用这样的特点,我们设计出了单例模式
public class Single { private static Single instance=new Single(); private Single(){ } public static Single getSingle(){ return instance; } public void print(){ System.out.println("s***************"); } public static void main(String[] args) { Single.getSingle().print(); } } |
注意:static的属性,内存只有一份,被所有的对象恭享一个属性。
Static属性的全局属性,可以由类名称直接访问,static方法不能调用非static属性与方法。
代码块:
在Java中使用“{}”括起来的代码称为代码块,根据代码块的定义位置不同,分为四种:
·普通代码块:{}位于方法内
·构造块:{}位于类中 (构造块优先于构造方法执行,每次new的时候都会执行)
·静态块:使用static关键字声明的代码块,主要的是用来为静态属性初始化。(静态块优先于住方法执行,优先于构造块执行,只执行一次)
·同步块:sychronized声明加上{}的块。
public class CodeDemo01 { { System.out.println("********构造态块********"); } public CodeDemo01(){ System.out.println("*******构造方法********"); } static{ System.out.println("***********静态块**********"); } public static void main(String[] args) { new CodeDemo01(); new CodeDemo01(); { System.out.println("*******这是普通代码快*******"); } } } /***********静态块********** ********构造态块******** *******构造方法******** ********构造态块******** *******构造方法******** *******这是普通代码快*******/ |
内部类:内部类的唯一优点:可以方便访问外部类的私有属性;
public class Outer { private String name="jtlyuan"; class Inner{ public void print(){ System.out.println("name="+name);//访问了Outer的私有属性name } } public static void main(String[] args){ Outer o = new Outer(); Outer.Inner i = o.new Inner();//定义内部类的格式 i.print(); } } |
如果内部类使用了static关键字,则表示外部类,可以通过Outer.Inner in =new Outer.Inner();定义,内部类可以放在类中,也可以放在方法中。但是内部类定义在方法中,方法中的形参要用final修饰。