Private关键字
我们都知道public是一个修饰符,因为我们在创建类的时候都会顺带着写上,在了解之后public修饰符是一个权限最大的一个。有最大就相对有最小,private是一个权限最小的修饰符。
Private:名为私有的,它的作用是修饰类中的成员(成员变量于成员方法)。而被private修饰的类成员只在本类中访问。
为什么要把某些类成员私有化呢?
在实际项目中,我们有些类中的特殊成员不便对外开放,如果是public的权限最大,人人都可以访问可以进行修改。
例:
Public class man
{
未经private过修饰
String name;
Int age;
Void nn(){System.out.println(name);}
经过private修饰
Private String name;
Private Int age;
Private Void nn(){System.out.println(name);}
}
因为被Private修饰后,被修饰的成员只能在本类中才可以访问,所以在创建对象的时候,对象名是不可以直接调用被Private修饰的类成员的。那我们要怎么才调用私有的成员呢?
封装是专为私有成员对外提供的方法,你无须知道我的私有成员是什么,只需要调用我封装的方法就可以了。就像电脑的开机键,你不需要知道电脑是怎么开机的,只需要按一下开机键就可以实现电脑开机。
注:Private 私有是不是代表封装呢?谨记:Private私有只是封装的一种形式体现。
封装:是指隐藏对象的属性和实现细节,仅对外部使用公共访问方式
封装的优点:隔离变化、便于使用、提高重要性、提高安全性、
封装的原则:将不需要对外的内容隐藏起来,把属性都隐藏起来,提供公共方法对其访问
每一个被Private私有修饰的类成员都对应着两个封装方法setxxx()、getxxx()。Set是设置,get是返回。
例:
Public class manDemo
{
public static void main(String[] args) {
man gg=new man();
gg.neme=”vhjv”;
gg.age=-20; //如果不私有化那么输入的年龄为-20合理吗?
}
}
所以
Public class man
{
private String name;
private int age;
设置名字
public void setName(String name)
{
this.name=name
}
返回名字
public String getName()
{
Return name;
}
设置年龄
public void setAge(int age)
{
if(0<= age && age <=150){
this.age = age;
}
else{
System.out.println(“请输入年龄有效值!”);
}
}
返回年龄
public int getAge()
{
Return age;
}
}
{
man gg=new man();
{
public static void main(String[] args) {
man gg=new man();
gg. setName(“小明“);
gg. setAge (-20);
System.out.println(gg. getName+gg. setAge);
}
}
this关键字
this译为这个,它代表所在类的对象引用,哪个对象调用this所在方法,this就代表那个对象。
什么时候使用this?
当成员变量与局部变量重名时用this。有时候我们为了代码的阅读性起的变量名都是可读的,但英文名字就一个不同的变量有多个。
例:
public void setName(String name)
{
this.name=name
}
这里采用this关键字是告诉计算机带this关键字的name是对引用的,右边的name是局部变量的。如果不带this,计算机就会根据就近原则判定为两个nama都是局部变量,从而出错。
构造函数
在没有创建构造函数时,系统会给该类加一个空参数的构造函数,当类中定义了构造函数时那么系统默认的构造函数就没了
对象一建立就会调用与之对应的构造函数
构造函数的作用:可用于给对象初始化
构造函数更一般函数在写法上不同
构造函数名与类名相同
在运行也有不同,构造函数只在对象建立时运行一次,而一般函数是在对象建立后,对象调用时运行的,给对象添加对象具备的功能,且可以调用多次。
Public class man
{
无参构造函数
Public man(){ }
有参构造函数
Public man(String name){ }
}
Public class manDemo{
public static void main(String[] args) {
调用无参构造函数
man gg=new man();
调用有参构造函数
man gg=new man(“小明“);
}
}
构造函数-重载
一个类中可以存在多个构造函数,而每个构造函数的函数名相同都是类名,这就关乎到构造函数的重载。
构造函数重载的前提是构造函数的参数列表不同
例:
Public class man
{
Public man (){ } 无参构造函数
Public man (String name){ } 有参构造函数
Public man (int age){ } 有参构造函数,参数列表不同
Public man (String name,int age){ } 有参构造函数,参数列表不同
}
Public class manDome{
public static void main(String[] args) {
对应对象调用对应的构造函数
man gg=new man() 调用无参构造
man gg=new man(“小明“)
man gg=new man(18)
man gg=new man(“小明“,18)
}
}
构造代码块
构造代码块,它存在于类中,可以给每对象进行初始化且优先于构造函数
Public class man
{
//构造代码块
{
System.out.println(“难搞”);
}
Public man (){ } 无参构造函数
}