private关键字
私有的,私密的
可以修饰成员变量、成员方法、构造方法、内部类。
被private修饰的成员,只能在本类中被访问。
private只是封装的一种体现形式,封装还可以使用其他的修饰符来完成
实例:
class private关键字1
{
public static void main(String[] args)
{
Student s = new Student();
s.name = "Tom";
s.age = 10;
s.score = 100;
s.show();
}
}
class Student
{
private String name;
private int age;
private int score;
public void show(){
System.out.println("name="+name+",age="+age+",score="+score);
}
}
结果:
---------- 编译java ----------
private关键字1.java:8: 错误: name可以在Student中访问private
s.name = "Tom";
^
private关键字1.java:9: 错误: age可以在Student中访问private
s.age = 10;
^
private关键字1.java:10: 错误: score可以在Student中访问private
s.score = 100;
^
3 个错误
输出完成 (耗时 0 秒) - 正常终止
因为变量已经成为私有,所以无法再在主类进行访问,所以加载不到权限,程序报错。
这时候,getter和setter方法,就变得至关重要,为了保护变量的同时又能对变量赋值和取值,就要在类中对变量进行封装,这里也是封装的一种体现形式。
getter和setter方法
class private关键字1
{
public static void main(String[] args)
{
Student s = new Student();
s.setName("Tom");
s.setAge(10);
s.setScore(100);
System.out.println("name="+s.getName()+",age="+s.getAge()+",score="+s.getScore());
s.show();
}
}
class Student
{
private String name;
private int age;
private int score;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.name = name;
}
public int getAge(){
return age;
}
public void setScore(int score){
this.score = score;
}
public int getScore(){
return score;
}
public void show(){
System.out.println("name="+name+",age="+age+",score="+score);
}
}
输出结果:
这时,就可以利用类中的方法来对成员变量进行赋值和取值了。
这里面set方法中,有一个关键字 this,也是十分重要的,this后面的变量是指代当前类中的成员变量,等号后面的变量是方法中传进来的局部变量,也就是把属性值在调用的时候传进来,然后再赋予给成员变量来达到给变量赋值的作用,这样的话可以少定义一些变量名,而且方便分析和记忆。
还有比较方便的一点是,可以在赋值的同时对传入的值进行条件控制,只赋予有价值是自己想要的值,例如输入名字不能太长,输入性别不能输入除了男女之外的信息等等。
例如:
import java.util.Scanner;
class private关键字
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
Student s = new Student();
boolean b_name;
do{
System.out.println("please input your name:");
String name = sc.next();
b_name = s.setName(name);
}while(b_name == false);
s.setAge(10);
s.show();
}
}
class Student
{
private String name;
private int age;
private int score;
public boolean setName(String name){
if(name.length()>4){
System.out.println("input error!please input again!");
return false;
}
else
{
this.name = name;
return true;
}
}
public String getName(){
return name;
}
public int setAge(int age){
this.age = age;
return age;
}
public int getAge(){
return age;
}
public void setScore(int score){
this.score = score;
}
public int getScore(){
return score;
}
public void show(){
System.out.println("name="+name+",age="+age+",score="+score);
}
}
效果为: