一、封装特性
封装的意义在于保护或者放置代码或数据被无意中破坏,并且能够保护成员属性,不让类以外的程序直接访问和修改。
原则:隐藏对象属性和实现细节,仅对外公开访问方法,并且控制访问级别。
利用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:字符串数组,用于接收参数