JAVA基础学习20171214-封装

1.封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问
通过该类提供的方法来实现对隐藏信息的操作和访问
隐藏对象的信息
流出访问的接口

2.封装的特点
只能通过规定的方法访问数据
隐藏类的实例细节,方便修改和实现

3.封装的实现
修改属性的可见性:设为private
创建getter/setter方法:设为public用于属性的读写
在getter/setter方法中加入属性控制语句:对属性值的合法性进行判断

代码:

package com.imooc.animal;
/**
 * 宠物猫
 * @author dingguanyi
 *
 */
public class Cat {
    //成员属性:昵称、年龄、体重、品种
    //修改属性的可见性---private 限定只能在当前类内访问
    private String name;//昵称 String类型默认值null
    private int month;//年龄 int类型默认值0
//  private double weight;//体重 double类型默认值0.0
//  private String species;//品种


    public Cat(){

    }

    public Cat(int month){
//      this.month=month;
        this.setMonth(month);
    }

    //创建get/set方法
    //在get/set方法中添加对属性的限定
    public void setName(String name){
        this.name=name;
    }

    public String getName(){
        return "我是一只名叫:"+this.name+"宠物猫";
    }
    public int getMonth() {
        return month;
    }
    public void setMonth(int month) {
        if (month<=0)
            System.out.println("输入信息错误,宠物猫的年龄必须大于0");
        else
            this.month = month;
    }

}


package com.imooc.animal;

public class CatTest {
    public static void main(String[] args){
        //对象实例化
        Cat one = new Cat(3);
        //测试
        one.setName("凡凡");
//      one.setMonth(0);
//      one.weight=1200;
//      one.species="中华田园猫";

        System.out.println(one.getName());
        if(one.getMonth()==0)
            return;
        System.out.println("年龄:"+one.getMonth());
//      System.out.println("体重:"+one.weight);
//      System.out.println("品种:"+one.species);
    }
}

4.包的管理
Java中一个包里不能存在同名类
包的命名规则:域名倒序+模块+功能,域名全部小写
5.跨包类的调用
建议采用“import 包名.类名;”的方式加载,提高效率
加载类的顺序跟import导入语句的位置无关

6.包的作用
管理java文件
解决同名文件冲突

7.定义包
语法:
package 包名;
例如:package com.imooc.animal;

注意:
包定义必须放在java源文件中的第一行
一个java源文件中只能有一个package语句
包名全部英文小写
命名方式:域名倒序+模块+功能

8.导入包
语法:
Import 包名.类名
例如:
导入包中全部类:import com.imooc.*;
导入包中指定类:import com.imooc.Cat;

9.static
static+属性静态属性/类属性
static+方法静态方法/类方法
static+类
static+方法类局部变量
static+代码块

10.静态成员的生命周期
类加载时产生,销毁时释放,生命周期长

11综合案例

package com.imooc.model;

public class Student {
    // 成员属性:学号、姓名、性别、年龄、专业
    private String studentNo;
    private String studentName;
    private String studentSex;
    private int studentAge;
    private Subject studentSubject;

    // 构造无参方法
    public Student() {

    }

    // 多参构造方法,实现对学号、姓名、性别、年龄的赋值
    public Student(String studentNo, String studentName, String studentSex, int studentAge) {
        this.setstudentNo(studentNo);
        this.setstudentName(studentName);
        this.setstudentSex(studentSex);
        this.setstudentAge(studentAge);

    }

    // 构造带参方法,实现对全部属性的赋值
    public Student(String studentNo, String studentName, String studentSex, int studentAge, Subject studentSubject) {
        this.setstudentNo(studentNo);
        this.setstudentName(studentName);
        this.setstudentSex(studentSex);
        this.setstudentAge(studentAge);
        this.setStudentSubject(studentSubject);

    }

    public void setstudentNo(String studentNo) {
        this.studentNo = studentNo;
    }

    public String getstudentNo() {
        return this.studentNo;
    }

    public void setstudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getstudentName() {
        return this.studentName;
    }

    /**
     * 限制性别只能是男或者女,反之强制赋值为男 
     * 
     * @param studentSex
     */
    public void setstudentSex(String studentSex) {
        if (studentSex.equals("男"))
            this.studentSex = studentSex;
        else {
            if (studentSex.equals("女"))
                this.studentSex = studentSex;
            else
                this.studentSex = "男";
        }
    }

    public String getstudentSex() {
        return this.studentSex;
    }

    /**
     * 给年龄赋值,规定必须在10-100之间,反之赋值为18
     * 
     * @param studentAge
     */
    public void setstudentAge(int studentAge) {
        if (studentAge < 10 || studentAge > 100)
            this.studentAge = 18;
        else
            this.studentAge = studentAge;
    }

    public int getstudentAge() {
        return this.studentAge;
    }

    /**
     * 获取专业对象,如果没有实例化,先实例化后再返回
     * 
     * @return 专业对象信息
     */
    public Subject getStudentSubject() {
        if (this.studentSubject == null)
            this.studentSubject = new Subject();
        return studentSubject;
    }

    public void setStudentSubject(Subject studentSubject) {
        this.studentSubject = studentSubject;
    }

    /**
     * 学生自我介绍的方法 
     * 
     * @return 自我介绍的信息:包括姓名、学号、性别、年龄
     */
    public String introduction() {
        String str = "学生信息如下:\n姓名:" + this.getstudentName() + "\n学号:" + this.getstudentNo() + "\n性别:"
                + this.getstudentSex() + "\n年龄:" + this.getstudentAge() + "\n所报专业名称:"
                + this.getStudentSubject().getsubjectName() + "\n学制年限:" + this.getStudentSubject().getsunbjectLife();
        return str;
    }

    /**
     * 学生自我介绍的方法
     * @param subjectName 所学专业名称
     * @param subjectLife 学制年限
     * @return 自我介绍的信息:包括姓名、学号、性别、年龄、所学专业名称、学制年限
     */
    public String introduction(String subjectName, int subjectLife) {
        String str = "学生信息如下:\n姓名:" + this.getstudentName() + "\n学号:" + this.getstudentNo() + "\n性别:"
                + this.getstudentSex() + "\n年龄:" + this.getstudentAge() + "\n所报专业名称:" + subjectName + "\n学制年限:"
                + subjectLife;
        return str;
    }

    /**
     * 学生自我介绍的方法
     * @param mySubject 所选专业的对象
     * @return 自我介绍的信息:包括姓名、学号、性别、年龄、所学专业名称、学制年限
     */
    public String introduction(Subject mySubject) {
        String str = "学生信息如下:\n姓名:" + this.getstudentName() + "\n学号:" + this.getstudentNo() + "\n性别:"
                + this.getstudentSex() + "\n年龄:" + this.getstudentAge() + "\n所报专业名称:" + mySubject.getsubjectName()
                + "\n学制年限:" + mySubject.getsunbjectLife();
        return str;
    }

}


package com.imooc.model;
/**
 * 专业类
 * @author dingguanyi
 *
 */
public class Subject {
    // 成员属性:学科名称、学科编号、学制年限、报名选修的学生信息、报名选修的学生个数
    private String subjectName;
    private String subjectNo;
    private int subjectLife;
    private Student[] myStudent;
    private int studentNum;

    // 无参构造方法
    public Subject() {

    }

    // 带参构造,实现对学科名称、编号、学制年限赋值
    public Subject(String subjectName, String subjectNo, int subjectLife) {
        // this.subjectName=subjectName;
        this.setSubjectName(subjectName);
        this.setsubjectNo(subjectNo);
        this.setsubjectLife(subjectLife);
    }

    // 带参构造,实现对全部属性的赋值
    public Subject(String subjectName, String subjectNo, int subjectLife, Student[] myStudents) {
        // this.subjectName=subjectName;
        this.setSubjectName(subjectName);
        this.setsubjectNo(subjectNo);
        this.setsubjectLife(subjectLife);
        this.setMyStudent(myStudents);
    }

    public void setSubjectName(String subjectName) {
        this.subjectName = subjectName;
    }

    public String getsubjectName() {
        return this.subjectName;
    }

    public void setsubjectNo(String subjectNo) {
        this.subjectNo = subjectNo;
    }

    public String getsubjectNo() {
        return this.subjectNo;
    }

    // 设置学制年限,限制必须>0
    public void setsubjectLife(int subjectLife) {
        if (subjectLife <= 0)
            return;
        this.subjectLife = subjectLife;
    }

    public int getsunbjectLife() {
        return this.subjectLife;
    }

    /**
     * 获取选修专业的学生信息,如果保存学生信息的数组未被初始化,则初始化长度为200
     * @return
     */
    public Student[] getMyStudent() {
        if(this.myStudent==null)
            this.myStudent=new Student[200];
        return myStudent;
    }

    public void setMyStudent(Student[] myStudent) {
        this.myStudent = myStudent;
    }

    public int getStudentNum() {
        return studentNum;
    }

    public void setStudentNum(int studentNum) {
        this.studentNum = studentNum;
    }

    /**
     * 专业介绍的方法
     * @return 专业介绍的相关信息,包含名称、编号、年限
     */
    public String info() {
        String str = "专业信息如下:\n专业名称:" + this.getsubjectName() + "\n专业编号:" + this.getsubjectNo() + "\n学制年限:"
                + this.getsunbjectLife();
        return str;
    }

    public void addStudent(Student stu){
        /*
         * 1、将学生保存到数组中
         * 2、将学生个数保存到studentNum
         * */
        //1、将学生保存到数组中
        for(int i=0;i<this.getMyStudent().length;i++){
            if(this.getMyStudent()[i]==null){
                this.getMyStudent()[i]=stu;
                //2、将学生个数保存到studentNum
                this.studentNum=i+1;
                return;
            }
        }
    }

}


package com.imooc.test;
import com.imooc.model.Subject;
import com.imooc.model.Student;

public class SchoolTest {
    public static void main(String[] args){
        //测试Subject
        Subject sub1=new Subject("计算机科学与应用","J00001",4);
        Subject sub2=new Subject();
        System.out.println(sub1.info());
        System.out.println("============================");
        //测试Student
        Student stu1=new Student("S01","张三","男",20,sub1);
        System.out.println(stu1.introduction());
        System.out.println("============================");
        Student stu2=new Student("S02","李四","女",17);
        System.out.println(stu2.introduction("计算机科学与应用", 4));
        System.out.println("============================");
        Student stu3=new Student("S03","王五","男",18);
        System.out.println(stu3.introduction(sub1));
        System.out.println("============================");
        //测试指定专业中到底有多少学生报名
        sub1.addStudent(stu1);
        sub1.addStudent(stu2);
        sub1.addStudent(stu3);
        System.out.println(sub1.getsubjectName()+"的专业中已有"+sub1.getStudentNum()+"个学生进行报名");
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值