天天看点

java-修饰符

1.访问修饰符

限定词 同一个类中 同一个包中 不同包中的子类 不同包中的非子类
private
无限定词
protected
public

(1)private

只能被所属类访问,类、接口不能声明为这种类型,外部只能通过类中的公共方法访问。隐藏类的实现细节和保护数据。

package create;

public class PrivateTest {
	private String name;   //私有的成员变量

	//私有成员变量的get/set方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
	public static void main(String[] args){
		//创建类的对象
		PrivateTest p = new PrivateTest();
		//调用对象的set方法,为成员变量赋值
		p.setName("private访问修饰符");
		//打印成员变量name的值
		System.out.println("name = " + p.getName());
	}	
}

           

(2)不使用任何关键字

他们可以被当前包里其他类访问。

package create;

public class DefaultTest {
	String name;   //默认修饰符的成员变量	
	String getName() {  //默认修饰符成员变量的get方法
		return name;
	}
	void setName(String name) {  //默认修饰符成员变量的set方法
		this.name = name;
	}		
	public static void main(String[] args){
		DefaultTest d = new DefaultTest();
		d.setName("default test");
		System.out.println(d.getName());
	}
}
           

(3)protected

能被包内任何类访问,也可以被不同包中的子类访问。

package create;

public class Person {
	protected String name;
	protected void sing(){
		System.out.println("父类...");
	}
	
	public void test(){
		System.out.println("父类:public test");
	}
	
}
package child;

import create.Person;
public class Women extends Person{
	public static void main(String[] args){
		Women w = new Women();
		w.sing();
		w.name = "protected";
		System.out.println(w.name);
	}
}


           

(4)public

package create;

public class Person {
	protected String name;
	protected void sing(){
		System.out.println("父类...");
	}
	
	public void test(){
		System.out.println("父类:public test");
	}
	
}
package child;
import create.Person;
public class PublicTest {
	public static void main(String[] args) {
		Person p = new Person();
		p.test();
	}
}


           

2.非访问修饰符

(1)static修饰符

修饰成员变量和方法,直接通过类名访问。

格式:类名.静态变量名

类名.静态方法名

静态方法不能使用类的非静态变量,静态方法必须被实现,只能访问所属类的静态成员变量和静态成员方法。

静态代码块独立于类成员,位置随便放,加载类是时会被执行,

package create;

public class StaticTest {
	public static final String BANANA = "香蕉";  //static final 修饰的常量
	public static float price = 5.2f;    //final定义的成员变量
	
	static{
		System.out.println("static 静态块");
	}
	
	public static void test(){
		System.out.println(StaticTest.BANANA + "的价格是:" + StaticTest.price);
	}
	
	public static void main(String[] args){
		StaticTest st = new StaticTest();
		st.test();
		System.out.println("main()中,"+st.BANANA+"的price = " + st.price);
	}
}

           

static 静态块

香蕉的价格是:5.2

main()中,香蕉的price = 5.2

(2)final修饰符

用final修饰的变量是常量,值一旦给定就无法改变。

如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。

使用final方法的原因有两个:一是把方法锁定,防止任何继承类修改它的意义和实现。二是高效。

final关键字声明的类不能被继承,即最终类。