欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

常用关键字

程序员文章站 2022-06-06 23:29:27
...

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

—胡@总

一、访问限定符

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