• (三)封装与类


    目录

    一、类

    二、对象

    三、封装对象(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关键字:

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

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

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

    不足请留言!

  • 相关阅读:
    Datastage 调度相关 dsjob
    DropdownList内容树状展示 字段前空格不显示
    IE兼容低版本设置
    跑数速度慢,修改参数
    cognos samples 安装配置【转】
    在子窗口中操作父窗口(刷新)
    html长文本自动换行
    Asp.net禁止缓存
    【Range Lookup】 根据年龄 求年龄分段ID
    目标表已有对应数据则不插入
  • 原文地址:https://www.cnblogs.com/ldu-xingjiahui/p/12594033.html
Copyright © 2020-2023  润新知