Java面向对象进阶

一、封装特性

封装的意义在于保护或者放置代码或数据被无意中破坏,并且能够保护成员属性,不让类以外的程序直接访问和修改。

原则:隐藏对象属性和实现细节,仅对外公开访问方法,并且控制访问级别。

利用private修饰符修饰要限制的属性,然后使用set和get方法给外界提供可调用的方法;
为了避免出现逻辑错误,建议对所有属性进行封装,为其提供set和get方法。

示例:

/**
 * @param null
 * @Description 编写一个类 Book,代表图书。
 * 具有属性: 名称(title)、页数(pageNum),其中页数不能少于 200
 * 页,否则输出错误信息,并赋予默认值 200。
 * 具有方法: 为各属性设置赋值和取值方法。 detail,用来在控制台输出每
 * 本图书的名称和页数
 * @Return
 * @Author Mr Bai's Soda
 * @Date Created in 2021/2/22 16:30
 **/
public class Book {
    private String title;//名称
    private int pageNum;//页数

    /**
     * 无参构造函数
     */
    Book() {
    }

    /**
     * 全参构造函数
     */
    Book(String title, int pageNum) {
        this.title = title;
        this.pageNum = pageNum;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getPageNum() {
        return pageNum;
    }

    /**
     * @param pageNum
     * @Description 如果设置的页数小于200,报错,并自动设置
     * @Return void
     * @Author Mr Bai's Soda
     * @Date Created in 2021/2/22 16:32
     **/
    public void setPageNum(int pageNum) {
        if (pageNum < 200) {
            this.pageNum = 200;
            System.out.println(this.title + "的页数有误,自动设置为200");
        } else {
            this.pageNum = pageNum;
        }
    }

    /**
     * 输出书的详细信息
     */
    public void detail() {
        System.out.println("书的名称是:" + title + ",书的页数是:" + pageNum);
    }
}

二、this关键字

在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:
· 调用类中的属性
· 调用类中的方法或构造方法
· 表示当前对象

三、static关键字

static修饰的属性存储在方法区中,不需要依赖对象来访问,只要类被加载了,就可以根据类名来访问。可以理解为类的属性。无论类存在多少个对象,静态属性永远在内存中只有一份。

static也可以用来修饰方法、语句块等;
public static void play() {...}
static {...}
被static修饰的属性、方法可以通过类名.属性或类名.方法来调用;
System.out.println(Student.subject);
Student.play();
静态修饰的方法,被调用时,有可能对象未创建。

在访问时,静态不能访问非静态,非静态可以访问静态。

示例:

public class Student {
    private static String company = "开课吧";
    private static String subject = "Java学科";
    private String name;
    private int age;
    private char sex;
    private String hobby;

    Student() {
    }

    Student(String name, int age, char sex, String hobby) {//构造函数,不传入公司和学科
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.hobby = hobby;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

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

    public char getSex() {
        return sex;
    }

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

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    /**
     * @param
     * @Description 打印具体信息
     * @Return void
     * @Author Mr Bai's Soda
     * @Date Created in 2021/2/22 16:38
     **/
    public void show() {
        System.out.println("学员姓名:" + name + ",学员年龄:" + age + ",性别:" + sex +
                ",爱好:" + hobby + ",公司:" + company + ",所学学科:" + subject);
    }
}

四、代码块

1.普通代码块:编写在顺序执行的流程中的代码块

2.构造代码块:随着对象的每次创建,执行一次,执行在构造方法之前

注意:无论用户调用哪一个构造方法来创建对象,构造代码块都必然执行

3.静态代码块:在代码块前面加上static,随着类的加载,静态代码块执行,静态代码块只执行一次。(准备唯一资源时候使用)

构造方法与构造代码块以及静态代码块的执行顺序:
	静态代码块 --> 构造代码块 --> 构造方法

五、包(package)

1.包介绍

1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2、包如同文件夹一样,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,
应该加上包名加以区别。因此,包可以避免名字冲突。
3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

2.包的使用规则

在.java文件的首部,必须编写类所属哪个包
格式: package 包名;
通常由多个单词组成,所有单词组成,单词以“.”间隔,一般命名为“com.公司名.项目名.模块名...”
可以通过 import 关键字来进行导包操作;

六、权限修饰符

public:当前类、当前包、子类、其他包(资源的跨包访问)

protected:当前类、当前包、子类

default:当前类、当前包

private:当前类(用于封装)

七、main方法

public 表示公共的内容,可以被所有操作所调用

static 表示方法是静态的,可以由类名称直接调用

void 表示没有任何返回值操作

main 系统规定好的方法名称

String[] args:字符串数组,用于接收参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白的Soda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值