常用关键字
技术总结中应当加入相应的代码分析,这样使得自己的总结更具说服性,也能说明自己的学习不是在鹦鹉学舌,而是真正掌握了方法。
—胡@总
一、访问限定符
public 可以在同一个工程中被任意调用
protected 可以在同一个包下被任意调用,可以被继承使用
默认(default) 可以在同一个包下被任意调用,不可以被继承使用
private 只可以在同一类下调用
1. 我们在平时用的时候,用的范围越小越好,这样可以提高安全性
private String sname;
public String snume;
如上所示,定义成private就只能在本类中使用,这样避免了使得在包中其他类调用时变量名时改变其值出错的概率
2. 子类在重写父类的方法时,不能够减小父类的可见范围,可以放大或者保持其范围。这个问题直接从代码上看就好了
publicclass A {
publicvoid print1(){
System.out.println("子类重写父类方法可以缩小访问符的范围");
}
publicvoid print2(){
System.out.println("子类重写父类方法不可可以缩小访问符的范围");
}
}
publicclass B extends A {
privatevoid print1(){//这个地方报错“不能降低自 A 继承的方法的可视性”
super.print1();
}
publicvoid print2(){
super.print2();
}
}
所以,得以证明!!
<!--[if !supportLists]-->3. <!--[endif]-->接口中的属性和方法都是public的,不写的话默认是public;抽象类中申明为abstract的方法,也默认是public的。
二、this的用法
1.代表一个对象,这个对象是这个类实例化后的对象
2.在同一个类中调用属性或者方法事什么也没写,可以看作是省略了this
publicclass A {
private String sname;
privateintsnum;
public A(String name,int num){
sname=name;
snum =num;
}实现情况如上所示,程序没有报错,证明构造函数传入的数据赋给了sname和snum
3.可以用在构造方法中调用自己的另外一个构造方法
代码演示如下:
publicclass A {
private String name;
privateintnum;
public A(){
this("张三",123);
}
public A(int num){
this("张三",num);
}
public A(String name,int num){
this.name=name;
this.num =num;
}
Eclipse没有报错,说明是可以滴!!
三、super 的用法
1、表示当前的父类对象 用在子类里中的(object里不能用super)
2、调用父类的构造方法 构造方法没有重写和继承
实例化子类时,一定会先调用父类的无参构造方法,再调用自己的方法,自己的方法将原来的覆盖了,这里的覆盖是指
“把父类的构造方法中的内容引过来了(相当于来了一个super();),然后再执行子类自己的语句”
这里我们看代码示例:
publicclass A {
publicfinalintt=10;
public A(){
System.out.print("A");
}
}
publicclass B extends A {
public B(){
// super();
System.out.print("B");
}
publicstaticvoid main(String args[]){
B b = new B();
}
}
运行的结果如下
AB
由运行结果证明了确实是这个样子的!!
四、final 的用法
不可更改的 可以定义类,属性,方法,变量
public final classA{} 不能被继承,断子绝孙
public final int age==10; (变量只能赋一次值)
public final void test(); 不能被重写
final int age==10; 属性 只能赋一次值
final也可以修饰形参: 不能修改所指向的地址 地址不能变,但是地址里面的值可以变
public void change(final A a){
a.setName("默认")
}
在匿名内部类中调用外部类的局部变量和全局变量时,必须要用final标记被调用的变量
五、static的用法
静态关键字可以用来修饰属性与方法。static的意思是我在类被实例化的过程中是最先会在内存中留下static修饰的属性或者方法的一片空间的。它使得所有对象都具有某一相同的属性或者方法的都指向这个地址,这样减少了内存空间的占用。
在这里要注意了,属性这个东西以前自己的理解太狭隘了,它并不只是指用八种基本数据类型和String关键字定义的变量,它还包含自己创建的类申明下的变量名。
静态方法和静态属性可以直接被类名调用,而非静态的方法和属性必须要通过对象进行调用。
因为static属性的这一特定,所以在定义属性时,是否为static一定慎重考虑:static属性可以直接在任何方法中调用,但在static方法中,则只能直接调用static属性;非static属性,就必须通过创建对象时调用。
程序加载过程中:首先是加载静态块和静态属性,然后是主函数,最后是静态方法
静态属性,创建对象的时候就刷新一次
2012.7.13左右
上一篇: 反射(Reflaction)初探
下一篇: WSGI的理解