关键字的理解与使用

  • 常用关键字

    1.访问限定符          可以用来修饰类   属性  方法  构造方法

                          工程      同一个包      同一个类      不同包中的子类
 public                √              √                √                √
 protected                           √                √               √
  默认(null)                        √               √
 private                                                 √     

 

 

   2.this 和 super

    1. this         指当前类的一个对象
                      在构造方法中调用当前类的另外一个构造方法

    2. super       指当前类的父类的对象
                      指调用当前类的父类的构造方法

   3.final  可修饰  类 属性 方法 变量

      final修饰类时则类不可被继承,修饰方法时方法不能再被重写,修饰属性时则属性不再能被修改。

                public final class A{}
    	private final t;
    	public final void m(){}

  

   4.static   可修饰类   属性  方法   代码块

      1.修饰属性  static修饰的属性又称为类属性,静态属性数据保存在类空间中,只要加载类,静态属性即被调用,static修饰的数据和方法是作为整个,而不是类的某个特定对象而存在的。

      下面是static属性代码及运行结果示例:

package Keywords博客示例;

public class C {
//声明非静态属性
     String name;
        int age;
//声明静态属性,通常为共同属性
     static String sex = "男";
     
     public void person(String name,int age){
    	 this.name = name;
    	 this.age = age ;
     }
     public String getinfo(){
    	 
    	 return " 姓名:"+ name +" 年龄:"+age +" 性别:"+ sex;
     }
	
	
	
	
}

package Keywords博客示例;

public class D {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//新建对象
		C c1 = new C();
		C c2 = new C();
		C c3 = new C();
		//通过调用C类中的person方法赋予c1,c2,c3等各对象属性
		c1.person("大师兄",25);
		c2.person("二师兄",20);
		c3.person("小师弟",15);
		//修改sex值前
		System.out.println(c1.getinfo());
		System.out.println(c2.getinfo());
		System.out.println(c3.getinfo());
		//直接用类名.static属性修改属性
		//static属性不需要对象来调用,加载类时即运行
        C.sex="女";
        //修改sex值后
        System.out.println(c1.getinfo());
            System.out.println(c2.getinfo());
            System.out.println(c3.getinfo());
	}

}
运行结果
姓名:大师兄 年龄:25 性别:男
姓名:二师兄 年龄:20 性别:男
姓名:小师弟 年龄:15 性别:男
姓名:大师兄 年龄:25 性别:女
姓名:二师兄 年龄:20 性别:女
姓名:小师弟 年龄:15 性别:女

  2.static方法代码及运行结果示例

//只需在如上代码C类中加入一个定义性别的方法 
public static void Csex(String s){
    	 sex = s;
     }
这个程序需要注意的是,在static方法中,是不能够使用this关键字的. static修饰的数据和方法是作为整个,而不是类的某个特定对象而存在的。
而this代表的是某个正在使用的当前对象.  

//并在D类中调用
//直接用类名.static方法来调用方法
        C.Csex("女");

运行结果相同

 3.代码块代码示例

//将新建对象行改为注释即没有对象时
public class MainTest {
	public static void main(String args[]){
		System.out.println("B");
                              //MainTest mt = new MainTest();
	}
	       {
		System.out.println("A");
	}	
}
运行结果:B
//有对象时
public class MainTest {
	public static void main(String args[]){
		System.out.println("B");
                              MainTest mt = new MainTest();
	}
	       {
		System.out.println("A");
	}	
}
运行结果:BA

//有对象并给代码块加上static
public class MainTest {
	public static void main(String args[]){
		System.out.println("B");
                              MainTest mt = new MainTest();
	}
	 static {
		System.out.println("A");
	}	
}
运行结果:AB
//没有对象但给代码块加上static
public class MainTest {
	public static void main(String args[]){
		System.out.println("B");
                             // MainTest mt = new MainTest();
	}
	 static {
		System.out.println("A");
	}	
}
运行结果:AB
代码块需要新建对象将数据存于对象所属内存空间才能调用,但当用static修饰时,由于static修饰数据和方法存于类空间内,加载类时直接调用,先于对象

 

4. static方法与static属性之间的关系,static方法与static方法之间的关系   

      这里需要总结一下static方法/非static方法 可否访问 static属性/非static属性的关系:

 

   static方法只能直接调用static方法,否则只能通过实例化对象(new对象)来访问该方法. 这里最典型的例子是main方法的调用. 我们知道,main方法是static方法, 在main方法中要调用非static方法的话,必须要先实例化一个该方法所在类的对象,通过该实例化对象去调用方法. 如果该方法是static方法,main函数即可直接用类名调用,不需再实例化类对象了~

猜你喜欢

转载自gaozy11645.iteye.com/blog/1489868
今日推荐