封装
private:在开发中, 为了避免出现逻辑错误, 我们建议对所有属性进行封装,并为其提供setter及getter方法进行设置和取得 。
this:1.调用类中的属性
2.调用类中的方法或构造方法
3.表示当前对象
static:static表示“静态”的意思,可以用来修饰成员变量和成员方法
static的主要作用在于创建独立于具体对象的域变量或者方法
重点:
- 静态成员 在类加载时加载并初始化。
- 无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 )
- 在访问时: 静态不能访问非静态 , 非静态可以访问静态 !
代码块:
普通代码块
在执行的流程中 出现的 代码块, 我们称其为普通代码块。
构造代码块
在类中的成员代码块, 我们称其为构造代码块, 在每次对象创建时执行, 执行在构造方法之前。
静态代码块
在类中使用static修饰的成员代码块, 我们称其为静态代码块, 在类加载时执行。 每次程序启动到关闭 ,只会 执行一次的代码块。
作业
1、 编写一个类 Book,代表图书: 具有属性: 名称(title)、页数(pageNum),其中页数不能 少于 200 页,否则输出错误信息,并赋予默认值 200。
package day05;
/**
* 具有属性: 名称(title)、页数(pageNum),其中页数不能
* 少于 200 页,否则输出错误信息,并赋予默认值 200。
* 具有方法: 为各属性设置赋值和取值方法。 detail,用来在控制
* 台输出每本图书的名称和页数
*/
public class Book {
//主函数,入口
public static void main(String[] args) {
Book1 b1 = new Book1("西游记",800);//定义西游记这本书
b1.detail();
System.out.println();
Book1 b2 = new Book1("红楼梦",130);//定义红楼梦这本书
b2.detail();//打印详细信息
b2.setPageNum(400);//修改页数
b2.getPageNum();//输出修改后的页数
Book1 b3 = new Book1();//创建无参对象,默认书名为空,页数为0
System.out.println();
b3.detail();
}
}
class Book1 {//book类
private String title;//名称
private int pageNum;//页数
//无参构造方法
public Book1() {
title = "未知";
pageNum = 0;
}
//有参构造方法
public Book1(String s, int i) {
title = s;
if(i<200) {
pageNum = 200 ;
System.out.println(s+":页数少于200时,则默认为200页");
}else {
pageNum = i;
}
}
//修改书名
public void setTitle(String numa) {
title = numa;
System.out.println("修改之后的书名为:"+numa);
}
//提取书名
public String getTitle() {
return title;
}
//修改页数
public void setPageNum(int n) {
if(n<200) {
System.out.println("对不起,你输入的页数不合法!");
//默认值200
pageNum = 200;
return;
}
//页数大于等于200
pageNum = n ;
System.out.println("修改后的页数为:"+n);
}
//获取页数
public int getPageNum() {
return pageNum;
}
//detail方法
public void detail() {
System.out.println("该书的名称为:"+title+"总页数为:"+pageNum);
}
}
2. 通过类描述开课吧的 Java 学员。 具有属性: 姓名,年龄,性别,爱好,公司(都是:开课吧), 学科(都是:Java 学科)。
package day05;
public class JavaStudent {
/**
* 通过类描述开课吧的 Java 学员。
* 具有属性:
* 姓名,年龄,性别,爱好,公司(都是:开课吧),学科(都是:Java 学科)。
*/
public static void main(String[] args) {
Student a1 = new Student("张三",18,"男","健身");
a1.dentail();
}
}
class Student{//Student类
private String name;//姓名
private int age;//年龄
private String gender;//性别
private String hobby;//爱好
static String company;//公司
static String subject;//学科
public Student(String name,int age,String gender,String hobby) {
this.name = name;
this.age = age;
this.gender = gender;
this.hobby = hobby;
company = "开课吧";
subject = "Java学科";
}
public void setName(String name) {
this.name = name;
}
public String getNamr() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getGender() {
return gender;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getHobby() {
return hobby;
}
public void dentail() {
System.out.println("姓名:"+name+",年龄:"+age+",性别:"+gender+",爱好:"+hobby+",公司:"+company+",学科:"+subject);
}
}
3. 通过类描述衣服, 每个衣服对象创建时需要自动生成一个序号值。 要 求:每个衣服的序号是不同的, 且是依次递增 1 的。
package day05;
public class Clothes1 {
/**
* 通过类描述衣服, 每个衣服对象创建时需要自动生成一个序号值。 要
* 求:每个衣服的序号是不同的, 且是依次递增 1 的。
*/
public static void main(String[] args) {
clothes a1 = new clothes();
clothes b1 = new clothes();
clothes c1 = new clothes();
a1.nums();
b1.nums();
c1.nums();
}
}
class clothes{
private static int num = 1;
private int number;
public clothes() {
this.number = clothes.num;
clothes.num++;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public void nums() {
System.out.println("序列号为:"+number);
}
}