java学习笔记之封装——2021/03/13

封装和隐藏

  1. 使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。
  2. 对不能让调用者随意使用的属性做封装和隐藏。

一、信息的封装和隐藏

  1. java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
    • 隐藏一个类中不需要对外提供的实现细节
    • 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
    • 便于修改,增强代码的可维护性
  2. 示例:
//Person.java
public class Person{
	private int age;
	public void printAge(){
		System.out.println("年龄是:" + age);
	}

	public void setAge(int a){
		if(){
			age  = a;
		}else{
			System.out.println("输入的年龄" + a + "不在0-150之间");
		}
	}
}
//Test.java
import day06.Person;
public class Test{
	public static void main(){
		Person p = new Person();
		p.setAge(12);
		p.printAge();
	}
}

二、四种访问权限修饰符

  1. java权限修饰符public、protected、private置于类的成员定义前,用来限定对象对该类成员的访问权限
修饰符类内部同一个包子类(除前面情况之外的)任何情况
privateY
(缺省)YY
protectedYYY
publicYYYY
  1. 对于class的权限修饰符只可以用public和default(缺省)
    • public类可以在任意地方被访问
    • default类只可以被同一个包内部的类访问
    • 在同一个Java文件中可以写多个class,但是只能有一个public修饰的,其他的class只能是缺省的

三、类的成员之三:构造器(构造方法)

new对象实际上就是调用类的构造方法

1、 构造器的特征:

- 它具有与类相同的名称
- 它不声明返回值类型(与声明为void不同)
- 不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值

2、 构造器的作用:

创建对象;给对象进行初始化

3、 示例:

public class Person4{
	//默认的构造方法前面有没有访问的修饰符与定义的类有关,类是public的,默认的构造方法就是public;类是缺省的,默认的构造方法就是缺省的
	public Person4(){}
}

4、 构造器

- 根据参数不同,构造器可以分为如下两类:
	- 隐式无参构造(系统默认提供)
	- 显示定义一个或多个构造器(无参、有参)
- 注意 :
	- java语言中,每个类至少有一个构造器
	- 默认构造器的修饰符与所属类的修饰符一致
	- 一旦显示定义了构造器,则系统不再提供默认构造器
	- 一个类可以创建多个重载的构造器
	- 父类的构造器不可被子类继承

5、 示例一

//Person6.java
public class Person6{
	public Person6(){
		age = 18;//初始化定义每个人的年龄为18
	}
	public int age;
}
//Test.java
public class Test{
	public static void main(String[] args){
		Person6 p6 = new Person6();
		System.out.println(p6);
	}
}

//输出18

6、 示例二

//Person6.java
public class Person6{
	public Person6(int a,String n){
		age = a;
		name = n;
	}
	public int age;
	public String name;
}
//Test.java
public class Test{
	public static void main(String[] args){
		Person6 p6 = new Person6(12,"张三");
		System.out.println(p6.age);
		System.out.println(p6.name);
	}
}

7、构造方法重载

  1. 构造器一般用来创建对象的同时初始化对象。
  2. 构造器重载使得对象的创建更加灵活。
  3. 构造器重载,参数列表必须不同。

四、关键字——this

  1. 在Java中,this关键字比较难理解,它的作用和其词义很接近
    • 它在方法内部使用,即这个方法所属对象的引用
    • 它在构造器内部使用,表示该构造器正在初始化的对象
  2. this表示当前对象可以调用类的属性、方法和构造器
  3. 什么时候使用this关键字
    • 当在方法内需要用到调用该方法的对象时,就用this
  4. 使用this,调用属性、方法
    • 当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加this来表明该变量是类成员
    • 在任意方法内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性
//Person7.java
public class Person7{
	public Person7(int age,String name){
		this.age = age; //this.age是类的成员变量age
		this.name = name; //this.name是类的成员变量age
	}
	int age;
	String name;
	
	public void setName(String name){
		this.name = name; //把形参name赋值给成员变量name
	}

	public void setName1(String name){
		this.setName(name); //把setName1的形参name传递给setName
	}

	public void showInfo(){
		System.out.println("姓名:" + this.name);
		System.out.println("年龄:" + this.age);
	}
}
  • this可以作为一个类中,构造器相互调用的特殊格式
//Person7.java
public class Person7{

	public Person7(){}

	public Person7(int age){
		this.age = age;
	}

	public Person7(String name){
		this();//等同于调用public Person7()
		this.name = name;
	}

	public Person7(int age,String name){
		this(1);//等同于调用public Person7(int age)
		this.age = age; //this.age是类的成员变量age
		this.name = name; //this.name是类的成员变量age
	}
	int age;
	String name;
	
	public void setName(String name){
		this.name = name; //把形参name赋值给成员变量name
	}

	public void setName1(String name){
		this.setName(name); //把setName1的形参name传递给setName
	}

	public void showInfo(){
		System.out.println("姓名:" + this.name);
		System.out.println("年龄:" + this.age);
	}
}
  1. 注意:
    • 使用this()必须放在构造器的首行
    • 使用this()调用本类中其它构造器,保证至少有一个构造器是不用this的(实际上就是不能构造器自己调用自己)
//Person7.java
public class Person7{

	public Person7(){
		this();//方式1:错误
		this("name");//方式2:错误(this.("name")调用了public Person7(String name),相当于变相的调用了自己public Person7())
	}

	public Person7(int age){
		this.age = age;
	}

	public Person7(String name){
		this();//等同于调用public Person7()
		this.name = name;
	}

	public Person7(int age,String name){
		this(1);//等同于调用public Person7(int age)
		this.age = age; //this.age是类的成员变量age
		this.name = name; //this.name是类的成员变量age
	}
	int age;
	String name;

五、JavaBean

  1. JavaBean是一种JAVA语言写成的可重用组件
  2. 所谓JavaBean,是指符合如下标准的
    • 类是公共的
    • 有一个无参的公共的构造器
    • 有属性(属性一般是私有的),且有对应的get、set方法
  3. 用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象、用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
  4. 示例

//一个完整的JavaBean
//私有的属性
//属性对应的get和set方法

public class Person8{
	private String name;
	private int sex;//性别,0男1女
	private int age;

	private void setName(String name)[
		this.name = name;
	}
	
	public String getName(){
		return this.name;
	}

	public void setSex(int sex){
		this.sex = sex;
	}

	public int getSex(){
		return this.sex;
	}

	public void setAge(int age){
		this.age = age;
	}

	public void getAge(){
		return this.age;
	}
}
//Test.java
Person p8 = new Person8();
p8.setName("张三");
p8.setSex(0);
p8.setAge(20);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值