一、访问控制属性
public:权限最大的。所有的地方都可以用,可以直接用实例化对象用“.”来访问。如方法和属性。不过为了保证封装性,一般属性都用private,不对外提供或继承的方法也用private。
private:权限最小的,只有在类的定义了中才能使用。就是类自身才能使用。可以很好的保持封装的特性。
protected:只比public小,在同胞中和子类中都可访问,用“.”。
什么都不写: 默认的,在同胞中可以访问。
二、代码块
类中的代码块一定在 构造器之前执行。
static:静态的,共享的。被它修饰的属性或者方法,是整个类共用的。可以用ClassName直接访问。当然对象名也可以
其他属性,方法:一般都是每个对象私有的,必须先要有对象,才能使用。
静态方法中,只能访问静态的属性或者方法,其他动态的加载时不能确定。
静态的都是加载时执行的。所以在没有对象之前就存在了,类名可以访问它,但是它不能访问 不存在的对象。
但是没有对象,就没有对象的属性和方法。无法访问。
静态代码块:static{*************}这个代码块是在类加载器加载class文件时,执行的。只有一次。用作环境和资源的初始化。
普通代码块:{****************}它是在实例化每个对象时比如new ClassName()都会调用的,而且比构造器先执行。一般很少用
三、内部类
成员内部类的保存:
OuterClassName$InnerClassName.class
1.成员内部类:
写在属性后面的,没有在方法体中。 Outer out = new Outer(); Inner in = out.new Inner();
2.静态内部类:
如果成员内部类被static修饰,那么他就是静态内部类了,跟静态变量一样,整个类共享;可以通过类名直接使用。
Inner in = new Outer.Inner();
3.局部内部类:
写在方法体中,所以可以类名相同;且只能在方法中使用。它的生命周期在这个方法中,外部不可见。
局部内部类的保存:
OuterClassName$这里为出现的第几次InnerClassName.class
4.匿名内部类:
如果写在方法的参数中,如 Method(new ClassName(){ 属性,方法}
);就是一个匿名内部类了。只有使用,没有名字(引用指向它)。
列子:
public class FormatTest {
private static int maxStringLength;
private static double minSize;
public FormatTest(){
}
public FormatTest(int maxStringLength,double minSize){
this.minSize = minSize;
this.maxStringLength = maxStringLength;
}
public static boolean testStringLength(String str){
if(str.length() <= maxStringLength){
return true;
}
else{
return false;
}
}
public static boolean testDouble(double d){
if(d >= minSize){
return true;
}
else{
return false;
}
}
}