02 Java面向对象—第3节 面向对象进阶

目录

  • 一、面向对象进阶训练任务
    • 1.、编写一个类 Book,代表图书
      • 问题描述
      • 代码
    • 2、通过类描述开课吧的 Java 学员
      • 问题描述
      • 代码
    • 3、通过类描述衣服, 每个衣服对象创建时需要自动生成一个序号值
      • 问题描述
      • 解题思路
      • 代码
      • 关键技术

一、面向对象进阶训练任务

1.、编写一个类 Book,代表图书

问题描述

具有属性: 名称(title)、页数(pageNum),其中页数不能少于 200 页,否则输出错误信息,并赋予默认值 200。

具有方法: 为各属性设置赋值和取值方法。 detail,用来在控制台输出每 本图书的名称和页数

编写测试类 BookTest 进行测试:为 Book 对象的属性赋予初始值,并调 用 Book 对象的 detail 方法,看看输出是否正确

代码

public class BookTest {

	public static void main(String[] args) {
		
		Book book1 = new Book();
		book1.setTitle("《Java编程思想》");
		book1.setPageNum(150);//错误提示
		book1.detail();
		
		Book book2 = new Book("《Java进阶》",680);
		book2.detail();
	}
}

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;
	}
	public void setPageNum(int pageNum) {
		if(pageNum >= 200) {
			this.pageNum = pageNum;
		}else {
			System.out.println("页数不能少于200,已自动设置为默认值200");//输出提示
			this.pageNum = 200;
		}
	}
	
	public void detail() {
		System.out.println("图书名称为" + title + ",页数为" + pageNum);
	}
}

运行结果:
在这里插入图片描述

2、通过类描述开课吧的 Java 学员

问题描述

具有属性: 姓名,年龄,性别,爱好,公司(都是:开课吧),学科(都 是:Java 学科)。

思考:请结合 static 修饰属性进行更好的类设计。

代码

public class StudentTest {

	public static void main(String[] args) {
		
		Student.company = "开课吧";
		Student.subject = "java";
		Student s1 = new Student("张三", '男',18, "rap");
		Student s2 = new Student("囡囡", '女',16, "piano");		
		Student s3 = new Student("瑶", '女',28, "辅助");			
		s1.info();
		s2.info();
		s3.info();		
	}
}

class Student {
	private String name;
	private int age;
	private char sex;
	private String hobby;
	static String company;
	static String subject;
	
	Student(){
		
	}
	
	Student(String name,char sex,int age,String hooby){
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.hobby = hooby;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if(age > 0 || age < 200) {
			this.age = age;
		}else {
			System.out.println("您输入年龄错误!");
			this.age = 1;
		}
	}
	
	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;
	}
	
	public void info() {
		System.out.println("姓名: " + name + "\t性别:" + sex + "\t年龄:" + age + "\t爱好:" + hobby + "\t公司:" + company + "\t课程:" + subject );
	}
}

运行结果:
在这里插入图片描述

3、通过类描述衣服, 每个衣服对象创建时需要自动生成一个序号值

问题描述

要求:每个衣服的序号是不同的, 且是依次递增 1 的

解题思路

由题意知,每创建一个对象就需要将编号+1,这里很明确指出每创建一个对象 内部就有变化,那可以采用 构造代码块来将编号+1。

代码

public class ClothesTest {

	public static void main(String[] args) {
		Clothes c1 = new Clothes("短袖", "M", "红");
		Clothes c2 = new Clothes("长袖", "L", "白");
		Clothes c3 = new Clothes("羽绒服", "M", "白");

		c1.info();
		c2.info();
		c3.info();
	}
}

class Clothes {

	private static int count = 1; // 计数
	private int ID; // 赋予编号
	private String color;
	private String size;
	private String type;
	
	Clothes(){
		
	}
	
	Clothes(String type,String size,String color){
		this.type = type;
		this.size = size;
		this.color = color;
	}
	
	/*
	 * 构造代码块 每次创建新的对象时均会调用
	 * 执行顺序:静态代码块>构造代码块>构造方法
	 */
	{
		this.ID = count++;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getSize() {
		return size;
	}

	public void setSize(String size) {
		this.size = size;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
	
	public void info() {
		System.out.println("编号:" + ID + "\t类型:" + type + "\t大小:" + size + "\t颜色:" + color);
	}
}

运行结果:
在这里插入图片描述

关键技术

构造代码块 :在类中的成员代码块, 我们称其为构造代码块

  • 随着对象的每次创建,均会执行一次。 且执行在构造方法之前;
  • 执行顺序:静态代码块 > 构造代码块 > 构造方法

热门文章

编程学习 ·

FFMPEG编译ffplay

关键就是要有SDL安装SDL(失败)yum install -y SDL-devel编译SDL2(成功) https://blog.csdn.net/quantum7/article/details/104173159编译参数# export is must use export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}pkg-config --modversion ffnvcodecC…
编程学习 ·

Bazel responsitory_rule 创建一个 rule

bazel respository_rule 主要功能是创建一个workspace 空间。对于package 内部的BUILD.tpl文件target 可以使用 responsity_ctx.file("//package") 创建 BUILD文件,或者repository_ctx.template(“BUILD”, build_tpl, {})对BUILD文件进行修改,然后通过@< name&…
编程学习 ·

医疗知识图谱笔记(二)

1.re库import re # 从字符串中匹配是否有该模板 print(re.search(pattern = w{2}, string = www.runoob.com)) # 从字符串中替换掉该模板 print(re.sub(pattern = #.*$, repl = "", string = "2004-959-559 # 这是一个国外电话号码")) # 从字符串中找到所…
编程学习 ·

idea+maven配置log4j详解

实现log4j打印日志依赖的jar包共3个,在pom.xml中加入相关依赖: <!-- 添加log4j日志相关jar包:共3个jar--><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifac…
编程学习 ·

现代开发者必备:5个更流畅、更受欢迎的Python web框架

全文共1837字,预计学习时长9分钟图源:unsplash如今,可供选择的Python web框架有不少,能帮助你更快更轻松地创建web应用。本文就将为大家介绍一些更现代、使用更广泛的web框架。1.FastAPIFastAPI致力于实现轻便和快速,笔者很喜欢它,它的开发速度和简单程度令人欣慰。这对于…
编程学习 ·

Android项目复盘4

个人主页:https://chengang.plus/ 文章将会同步到个人微信公众号:Android部落格UVC协议文档网址:https://www.usb.org/documents?search=&type%5B0%5D=55&items_per_page=50 主要下载USB Video Class 1_5,关注下载zip包中的UVC 1.5 Class specification.pdf文件,…
编程学习 ·

linux重要知识清单:进程管理

相关的系统调度fork(): 用于创建进程,Linux中进程的创建者与被创建者是父子关系clone():克隆,真正实现创建进程的操作,fork()是不带参数的,clone()是带参数的,通过不同的参数后,可以不仅仅做fork(),也能做其他的创建进程的方式exec():加载外部存储器的一段代码,把一个可…
编程学习 ·

firewalld管理方式

1.firewalld的开启 systemctl stop iptables systemctl disable iptables systemctl mask iptables systemctl unmask firewalld systemctl enable --now firewalld2.关于firewalld的域trusted 接受所有的网络连接home 用于家庭网络,允许接受ssh mdns ipp-client samba-clie…
编程学习 ·

python_ask_02-Are object and instance the same?

ID = python_ask_02 文章目录QuestionAnswerReference Question Are object and instance the same? Answer Are they the same? My answer is NO. We say everything is object, but we never say everything is instance. Class and instance are both object.「对象」是一…
编程学习 ·

GIT学习

1. 初始化仓库 git init # 从而在指定文件夹下生成一个.git文件夹,即为.git仓库2. 配置 2.1 配置文件 windows系统下,这三个文件分别是在: 1.系统级别:`%git安装路径%/etc/gitconfig` 2.用户级别: `C:\Users\lingguiwang\.gitconfig` 3.仓库级别: `项目\.git\config`#…
编程学习 ·

JS Array

一、鉴别数组 typeof Array :Object (不可取) array instanof(Array) :true (可取) 二、转换方法 array.toString()返回字符串 array.valueOf() 返回数组本身 三、栈方法 pop()从尾部删除最后一个数据,并返回该值 push()在尾部加入新值,并返回加入后的…
编程学习 ·

Windows编程—Windows驱动开发环境搭建

文章目录前言步骤步骤一步骤二步骤三连接测试步骤四步骤五总结 前言 作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发对Windows程序开发人员却有极大的好处。一个直观的感受 程序操作权限更大了,因为处在内核层了嘛。应该可以…
编程学习 ·

HTML5 向网页嵌入视频和音频

现在很多网站上都会使用到视频和音频,HTML5 中提供了展示视频和音频的标签。向网页嵌入视频可以使用 <video> 标签,而嵌入音频可以使用 <audio> 标签。这两个标签都是 HTML 5 中新增的标签,两个标签中的属性和方法也很类似,但也有些不同。其中 audio 元素用于…
编程学习 ·

微信小游戏订阅消息

微信官方接口: 点击这里 wx.requestSubscribeMessage(Object object) 注意事项 一次性模板 id 和永久模板 id 不可同时使用。 低版本基础库2.4.4~2.8.3 已支持订阅消息接口调用,仅支持传入一个一次性 tmplId / 永久 tmplId。 2.8.2 版本开始,用户发生点击行为或者发起支付回…