`
中南大宝
  • 浏览: 33690 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

常用关键字

 
阅读更多

       技术总结中应当加入相应的代码分析,这样使得自己的总结更具说服性,也能说明自己的学习不是在鹦鹉学舌,而是真正掌握了方法。                                              

—胡@总

一、访问限定符

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;

     }实现情况如上所示,程序没有报错,证明构造函数传入的数据赋给了snamesnum

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左右

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics