this引用
关键字 this 与对象关联,它用于指示当前对象。
this的作用
1、区分类成员变量和方法的形参.
2、this关键字通常用于return语句中返回当前对象的引用。
3、在构造方法中调用其它构造方法
包的定义
包(package):一种将相关类及接口组织起来的集合体,既命名空间。
目的:
1)避免重名冲突。
2)实现访问权限控制。
声明方式:
package name;
package 为声明包的关键字。
name 为指定的包名。
name 可以分层次,不同的层次用点号“.”分隔。
包的命名技巧
1、package名称的第一部分是反顺序的类的创建者的域名。
例如 :package com.tsinghua.myJava;
[com.公司名称.地区.包名称]
2、把package名称分解为你机器上的一个目录。例如::myClass.java
包的引入
在一个类中引用另一个包中的类时,可用两种方式:
1.类长名(long name)即加上包名称的类名,如:
com.tsinghua.myJava.MyClass myClass = new com.tsinghua.myJava.MyClass( );
2.类短名(short name):用import关键字在类程序最前面引入包,然后使用该类名,如:
import com.tsinghua.myJava;
…
MyClass myclass = new MyClass();
声明方式:
import pkg1[.pkg2].(classname|*);
1. 可用点号(.)来隔离多级包名。
2 . classname 表明直接引入该包中的具体类。
3 . * 表明JAVA编译器引入整个包。
在import中使用*的警告:
星号形式可能会增加编译时间,但对运行时间、性能和类的大小绝对没有影响。
如果引入的两个包中有同名类,编译器将保持沉默,除非你试图运行其中一个。否则给出一个编译时的错误。
访问权限
java中四种不同的限定词限定的成员(成员变量或成员方法),访问权限由大到小依次为:
1)public 公共的
可以被所有的类访问。
2)protected 受保护的
可以被这个类本身访问。
被它的子类(同一个包以及不同包中的子类)访问。
同一个包中的所有其他的类访问。
3)默认的/友好
被这个类本身访问。
被同一个包中的类访问。
4)private 私有的
只能被这个类本身访问。
如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
Java中类的限定词的作用范围比较
实现类的封装
封装:将成员变量声明为私有的(private),再提供一个或多个公有(public)setXX() 和getXX()方法实现对该成员变量的访问和修改。
类中的私有成员变量/成员方法只能在该类内部调用,不能通过该类的对象调用。
封装的目的:
1、隐藏类的实现细节;
2、让使用者只能通过指定的方法访问数据,可以方便加入控制逻辑,限制不合理的操作;
3、便于修改,增强代码可维护性;
4、可进行数据检查。
内部类
将一个类定义置入另一个类定义中就叫作“内部类”
Ø 利用它可对那些逻辑上相互联系的类进行分组
Ø 并可控制一个类在另一个类里的“可见性”。
Ø 内部类对象保存了一个对外部类对象的引用。
Ø OuterClassName.this代表外部类对象的引用
Ø InnerClassName.this代表内部类对象的引用
1.Inner类是在Outer内部定义的
2.在Inner类中可以访问Outer类中的成员属性outer_I;
3.在Outer类中可在方法test()中创建内部类Inner的对象;
4.通过Outer类的对象调用test()方法最终就可以执行Inner类中的方法。
在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时,如果在该方法和内部类中都没有定义过这个变量,内部类中对this的引用会被传递给那个外部类对象的引用。
类中定义的内部类特点
1、内部类可以直接访问外部类的成员,反之则不行。
2、内部类可以声明为private或protected。
3、内部类成员只有在内部类的范围之类是有效的。
private内部类调用方式:
1、在外部类的方法中实例化内部类,并调用自己的方法;
2、实例化外部类,并调用包含内部类的方法。
static内部类
定义格式
修饰符 static class name{ }
static内部类特点:
1、static内部类可以象一个普通外部类一样直接创建该对象。
2、static内部类只能访问外部类中的静态成员或方法。
3、static内部类可以声明static成员,但非static的内部类不可以。
4、修饰符没有任何限制。
1.Inner为静态内部类。
2.Inner不能访问names属性和PrintName()方法。
3.在外部类中可以直接创建该类的对象。
内部类如何被外部类引用
将内部类声明为非private的就可以通过外部类创建一个内部类的对象引用,并可通过该引用调用内部类自己定义的方法。
声明调用方法:
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass ();
注:1、必须是外围类对象.new,而不能是外围类.new
2、在创建外围类对象之前,不可能创建内部类的对象(嵌套类除外)。
方法和作用域中的内部类
内部类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类。
特点:
1、可访问外部类的成员变量。
2、只能访问所在方法中的final类型的局部变量,因为用final定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期。
该类型的内部类调用方法:
直接通过外部类来调用内部类所在的方法。
OuterClass.innerOfOuterMethod( );
1、str为外部类的成员变量。
2、iArgs和 a都是方法amethod的局部final变量。
匿名类
1、和类有关的匿名类
当使用类创建对象时,程序允许我们把类体与对象的创建组合在一起,也就是说,类创建对象时,除了构造方法还有类体,此类体被认为是该类的一个子类去掉类声明后的类体,称作匿名类。
2、和接口有关的匿名类
Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了接口的类去掉类声明后的类体,称作匿名类 .