(三)封装与类

目录

一、类

二、对象

三、封装对象(JavaBean )

四、this、final关键字


一、类

1、成员:属性(成员变量)、方法

2、类的创建:

package day11;

修饰符 class 类名 {
	修饰符 属性类型 属性名称; //定义属性;
	
	修饰符 返回值 方法名() { //定义方法
		
	}
}

注意: 

①文件名必须与类名相同,且首字母必须大写。

②一个Java文件中只允许存在一个public类,但可存在多个非public类。

③修饰符包含:private、default(默认不写)、protect、public

④上表中,private的作用范围仅在类内部,表示仅在本类内部可对其进行修改,其它类不能,其余修饰符同理。

案例:创建学生信息类,包含学生学号、姓名、电话的属性,还包含输出学生信息的方法。

package day11;

public class Stuinfo {
	public int id;
	public String name;
	public int tel;
	
	public void showInfo() {
		System.out.println("学生信息如下:");
		System.out.println("学号:"+id+" "+"姓名:"+name+" "+"电话:"+tel);
	}
}

二、对象

1、创建对象:

案例:创建学生信息类的对象,为属性赋值并调用该类内部的方法。

package day11;

public class Test1 {
	public static void main(String[] args) {//main方法中创建对象
		Stuinfo stu=new Stuinfo();//new StuInfo对象
		
		stu.id=1;//赋值
		stu.name="张三";
		stu.tel=123456;
		
		stu.showInfo();//调用类中方法
	}
}

运行结果:

注意:要在main方法中创建对象。

 2、构造方法(构造器)

①含义:属于类中特殊方法,主要用于初始化类中属性的值。

②语法:

public 类名{
    赋初值语句
    ...
}

案例1:为Stuinfo类创建含有三个参数的构造方法,并为类中属性赋初值。

package day11;

public class Stuinfo {
	public int id;
	public String name;
	public int tel;
	
	public Stuinfo(int ids,String names,int tels){ //含有三个参数的构造器
		id=ids;
		name=names;
		tel=tels;
	}
	
	public void showInfo() {
		System.out.println("学生信息如下:");
		System.out.println("学号:"+id+" "+"姓名:"+name+" "+"电话:"+tel);
	}
}

注意:对一个只包含有变量构造器的类创建对象时,若使用Stuinfo stu = new Stuinfo();会报错(如下图)。 

正确创建对象的方法:

 案例2:可变个数的方法形参

package day11;

public class Stuinfo {
	public void ShowInfo(String ...str) { //也可使用String str[]代替String ...str
		System.out.println("输入的参数为:");
		for(int i=0;i<str.length;i++) {
			System.out.print(str[i]+" ");
		}
	}
}

注意:当参数即包含确定的类型又包含不确定个数的参数时,要把确定的参数放在String ...str的前面,中间使用逗号隔开。

package day11;

public class Stuinfo {
	public void ShowInfo(int id,String ...str) {
		System.out.println("输入的参数为:");
		for(int i=0;i<str.length;i++) {
			System.out.print(str[i]+" ");
		}
	}
}

3、类变量、类方法

①含义:使用static关键字修饰的属性、方法称为类变量、类方法。

②类变量:类变量被赋值后其值被共享。

案例:证明类变量被赋值后其值被共享。

package day11;

public class Stuinfo { //Stuinfo类
	public static int id;

	public Stuinfo(int ids) { //构造方法
		id=ids;
	}
	public static void getId() {
		System.out.println(id);
	}	
}

class Test1 {
	public static void main(String[] args) {
		Stuinfo stu1=new Stuinfo(10); //创建stu1对象赋初值为10并输出其值
 		stu1.getId();
		Stuinfo stu2=new Stuinfo(11);//创建stu2对象赋初值为11并输出stu1的值
		stu1.getId();
	}
}
//比较两次stu1中的id值是否发生变化,若发生改变则可证上述描述无误。

运行结果:

③类方法:使用static关键字修饰后可使用匿名对象调用其方法。

案例:证明类方法可用匿名对象直接调用。

package day11;

public class Stuinfo {
	public static void print() {
		System.out.println("hello world");
	}	
}
class Test1 {
	public static void main(String[] args) {
		Stuinfo.print(); //注意:不属于匿名对象
	}
}

运行结果:

若不用static修饰,直接使用匿名对象调用:

④匿名对象:

package day11;

public class Stuinfo {
	public static void print() {
		System.out.println("hello world");
	}	
}
class Test1 {
	public static void main(String[] args) {
		new Stuinfo().print();
	}
}

4、静态、非静态代码块

①作用:初始化

②非静态代码块:

  • 可调用静态、非静态属性或对象。
  • 创建对象都会执行一次代码块。
  • 同为代码块按先后顺序执行。

③静态代码块:

  • 不可以调用非静态属性、方法。
  • 静态代码块的执行要早于非静态代码块。
  • 静态代码块仅在首次创建对象时执行,以后不再执行。

④执行顺序:代码块(先静态后非静态、先上后下顺序)->显示初始化->构造方法(构造器)

三、封装对象(JavaBean )

1、含义:使代码使用更安全,便于操作。

2、封装方法:

①属性的修饰变为private(保证外部不能直接修改属性的值)。

②添加set、get方法,步骤如下图:

鼠标右键->按下图操作

勾选属性

点击创建

创建完成,如下图所示

四、this、final关键字

1、this关键字作用:

      ①当形参与变量重名时使用this区分。

      ②在方法中使用this提高代码的可读性。

案例:构造函数中使用this为属性初始化。

package day11;

public class Stuinfo {
	private int num;
	private String name;
	
	public Stuinfo(int num,String name) { //尽管形参名与属性名相同也可以区分
		this.num=num;
		this.name=name;
	}
}

案例2:在构造方法中使用this。

class Person{
	private String name ;		
	private int age ;			
	public Person(){	 
		System.out.println("新对象实例化") ;
	}
	public Person(String name){
		this();      // 调用本类中的无参构造方法
		this.name = name ;	
	}
	public Person(String name,int age){	
		this(name) ;  // 调用有一个参数的构造方法
		this.age = age;
	}
	public String getInfo(){	
		return "姓名:" + name + ",年龄:" + age ;
	}  
}

注意:

①static修饰的方法(类方法)中不可使用this关键字。

②this调用本类中的其它构造器,至少保证有一个不适用this()。

2、final关键字:

①标记类:该类不能再被继承。

②标记方法:该方法不能被重写。

③标记变量:该变量变为常量(常量要赋初值,并建议全部字符大写)。

不足请留言!

posted @ 2020-03-01 15:33  XJHui  阅读(149)  评论(0编辑  收藏  举报