【韩顺平Java笔记】第8章:面向对象编程(中级部分)【272-284】

272. 包基本介绍

272.1 看一个应用场景

272.2 包的三大作用

272.3 包的基本语法

273. 包原理

274. 包快速入门

在不同的包下面创建不同的Dog类

275. 包命名

276. 常用的包

一个包下,包含很多的类,java 中常用的包有:

  1. java.lang.* //lang 包是基本包,默认引入,不需要再引入.
  2. java.util.* //util 包,系统提供的工具包, 工具类,使用 Scanner
  3. java.net.* //网络包,网络开发
  4. java.awt.* //是做 java 的界面开发,GUI

277. 包的使用细节


最好还是需要什么类就导入什么类

package com.Marisa;import java.util.Arrays;public class Import01 {public static void main(String[] args) {//使用系统提供的Arrays完成数组排序int[] arr = {-1, 20 ,2, 13, 3};Arrays.sort(arr);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}System.out.println();}
}



278. 访问修饰符规则

278.1 基本介绍

java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):

  1. 公开级别:用 public 修饰,对外公开
  2. 受保护级别:用 protected 修饰,对子类和同一个包中的类公开
  3. 默认级别:没有修饰符号,向同一个包的类公开.
  4. 私有级别:用 private 修饰,只有类本身可以访问,不对外公开.

278.2 四种访问修饰符的访问范围

279. 访问修饰符细节


在com.Marisa.modifier包下创建A类,B类和Test类,其中Test类中有主方法,在com.Marisa.pkg包下写一个Test类,这个Test类也有主方法,分别执行两个主方法

A类:

package com.Marisa.modifier;public class A {//四个属性public int n1 = 100;protected int n2 = 200;int n3 = 300;private int n4 = 400;public void m1(){//在同一个类中,可以访问//public, protected, 默认, private//修饰的属性和方法System.out.println("n1=" + n1);System.out.println("n2=" + n2);System.out.println("n3=" + n3);System.out.println("n4=" + n4);}
}

B类:

package com.Marisa.modifier;public class B {//同包public void say(){A a = new A();//在同一个包下可以访问public,protected和默认//但是不能访问privateSystem.out.println("n1=" + a.n1);System.out.println("n2=" + a.n2);System.out.println("n3=" + a.n3);}}

com.Marisa.modifier包下的Test类:

package com.Marisa.modifier;public class Test {public static void main(String[] args) {A a = new A();a.m1();}
}

com.Marisa.pkg包下的Test类:

package com.Marisa.pkg;import com.Marisa.modifier.A;public class Test {public static void main(String[] args) {A a =new A();//在不同包下,可以访问public修饰的属性,//但是不能访问protected 默认 privateSystem.out.println("a.n1= " + a.n1);}
}

执行com.Marisa.modifier包下的Test类主方法的结果为:
n1=100
n2=200
n3=300
n4=400
n1=100
n2=200
n3=300
执行com.Marisa.pkg包下的Test类的主方法为:
a.n1= 100

  • 只有默认和public可以修饰类,访问权限遵循上述规则

方法也遵循


280. 封装介绍

面向对象编程有三大特征:封装、继承和多态。

封装的理解和好处:

281. 封装步骤

282. 封装快速入门

package com.Marisa.encap;public class Encapsulation01 {public static void main(String[] args) {Person person = new Person();person.setName("你是一个一个一个");person.setAge(114514);person.setSalary(114514);System.out.println(person.info());}}
class Person{public String name;//名字,公开的private int age;// age 私有的private double salary;// 薪水,私有//自己写set get方法太慢,使用快捷键//然后根据要求完善代码public int getAge() {return age;}public void setAge(int age) {if(age >=1 && age<=120){this.age = age;}else{System.out.println("你设置的年龄不对,年龄要在1-120,已设置默认24");this.age = 24;//给一个默认的24}}public double getSalary() {//可以增加权限判断return salary;}public void setSalary(double salary) {this.salary = salary;}public void setName(String name){//加入对数据的校验,相当于增加了业务逻辑if(name.length() >= 2 && name.length() <= 6){this.name = name;}else{System.out.println("名字的长度不对,需要(2-6)个字符,默认名字田所浩二");this.name = "田所浩二";}}public String getName(){return name;}//写一个方法,返回属性信息public String info(){return "信息为\nname=" + name + "\nage=" + age + "\nsalary=" +salary;}
}

运行结果:
名字的长度不对,需要(2-6)个字符,默认名字田所浩二
你设置的年龄不对,年龄要在1-120,已设置默认24
信息为
name=田所浩二
age=24
salary=114514.0

283. 封装与构造器

将刚才的代码加入构造器,将构造器与setXxx结合

package com.Marisa.encap;public class Encapsulation01 {public static void main(String[] args) {Person person = new Person("你是一个一个一个", 114514, 114514);System.out.println(person.info());}}
class Person{public String name;//名字,公开的private int age;// age 私有的private double salary;// 薪水,私有//自己写set get方法太慢,使用快捷键//然后根据要求完善代码public Person(){}//有3个属性的构造器public Person(String name, int age, double salary) {
//        this.name = name;
//        this.age = age;
//        this.salary = salary;//将set方法写在构造器中setName(name);setAge(age);setSalary(salary);}public int getAge() {return age;}public void setAge(int age) {if(age >=1 && age<=120){this.age = age;}else{System.out.println("你设置的年龄不对,年龄要在1-120,已设置默认24");this.age = 24;//给一个默认的24}}public double getSalary() {//可以增加权限判断return salary;}public void setSalary(double salary) {this.salary = salary;}public void setName(String name){//加入对数据的校验,相当于增加了业务逻辑if(name.length() >= 2 && name.length() <= 6){this.name = name;}else{System.out.println("名字的长度不对,需要(2-6)个字符,默认名字田所浩二");this.name = "田所浩二";}}public String getName(){return name;}//写一个方法,返回属性信息public String info(){return "信息为\nname=" + name + "\nage=" + age + "\nsalary=" +salary;}
}

运行结果:
名字的长度不对,需要(2-6)个字符,默认名字田所浩二
你设置的年龄不对,年龄要在1-120,已设置默认24
信息为
name=田所浩二
age=24
salary=114514.0

284. 封装课堂练习


Accoun.java:

package com.Marisa.encap;public class Account {private String name;//姓名private double balance;//余额private String password;//密码public String getName() {return name;}public void setName(String name) {if(name.length() >=2 && name.length() <=4){this.name = name;}else{System.out.println("名字输入不合法,长度为2,3,4,已设置默认名字田所浩二");this.name = "田所浩二";}}public double getBalance() {return balance;}public void setBalance(double balance) {if(balance > 20){this.balance = balance;}else{System.out.println("余额必须超过20,已设置默认值0");this.balance = 0.0;}}public String getPassword() {return password;}public void setPassword(String password) {if(password.length() == 6){this.password = password;}else{System.out.println("密码必须为6位,已设置默认密码:000000");this.password = "000000";}}//打印信息public String info(){//可以增加权限校验return "信息:\nname=" + name +"\nbalance=" + balance;}public Account(String name, double balance, String password) {setName(name);setBalance(balance);setPassword(password);}
}

AccountTest.java:

package com.Marisa.encap;public class AccountTest {public static void main(String[] args) {Account account = new Account("你是一个一个", 1, "1145141919");System.out.println(account.info());}
}

运行结果:
名字输入不合法,长度为2,3,4,已设置默认名字田所浩二
余额必须超过20,已设置默认值0
密码必须为6位,已设置默认密码:000000
信息:
name=田所浩二
balance=0.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1556987.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

农业政策与市场分析:解读当前政策导向下的农业发展趋势

在快速变化的全球经济格局中&#xff0c;农业作为国家稳定发展的基石&#xff0c;其政策走向与市场动态备受瞩目。本文将深入剖析当前的农业政策背景&#xff0c;探讨其对设计的导向作用&#xff0c;以及市场趋势的反馈与影响&#xff0c;为农业可持续发展提供洞见。 1. 政策背…

【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记

本文所要介绍的一本书《Neural Networks and Deep Learning》&#xff0c;该书作者Michael Nielsen&#xff0c;Y Combinator Research的研究员&#xff0c;是多年之前自己看的一本基础书籍&#xff0c;很适合入门了解一些关于深度学习的概念知识&#xff0c;当然也包含了一些小…

MyBatis 批量插入方案

MyBatis 批量插入 MyBatis 插入数据的方法有几种&#xff1a; for 循环&#xff0c;每次都重新连接一次数据库&#xff0c;每次只插入一条数据。 在编写 sql 时用 for each 标签&#xff0c;建立一次数据库连接。 使用 MyBatis 的 batchInsert 方法。 下面是方法 1 和 2 的…

三相逆变器中LCL滤波器分析

1.LCL滤波器 传统三相逆变器使用的是L型滤波器&#xff0c;其设计简单&#xff0c;但也存在着一些问题&#xff0c;如在同样的滤波效果下&#xff0c;L型滤波器电感尺寸、重量较大&#xff0c;成本较高&#xff0c;并且随着电感值的增大&#xff0c;其上的电压降增加比较明显&…

【MySQL必知会】事务

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 事务概念 &#x1f4c1; 事务操作 &#x1f4c1; 事务提交方式 &#x1f4c1; 隔离级别 &#x1f4c1; MVCC &#x1f4c2; 3个隐藏列字段 &#x1f4c2; undo日志 &#x1f4c2; Read View视图 &#x1f4c1; RR和R…

【GESP】C++一级练习BCQM3028,输入-计算-浮点型格式化输出

目前的几道题主要围绕浮点型的计算和格式化输出。强化基础语法练习。 详解详见&#xff1a;https://www.coderli.com/gesp-1-bcqm3028/ 【GESP】C一级练习BCQM3028&#xff0c;输入-计算-浮点型格式化输出 | OneCoder目前的几道题主要围绕浮点型的计算和格式化输出。强化基础语…

说说BPMN概念及应用

BPMN&#xff08;Business Process Modeling and Notation&#xff09;即业务流程建模与标注&#xff0c;是一种由OMG&#xff08;Object Management Group&#xff0c;对象管理组织&#xff09;制定的业务流程建模语言。以下是对BPMN标准的详细解释&#xff1a; 一、BPMN的起…

短剧系统源码短剧平台开发(H5+抖小+微小)部署介绍流程

有想法加入国内短剧赛道的请停下脚步&#xff0c;耐心看完此篇文章&#xff0c;相信一定会对您有所帮助的&#xff0c;下面将排序划分每一个步骤&#xff0c;短剧源码、申请资料、服务器选择、部署上架到正常运行等几个方面&#xff0c;整理了一些资料&#xff0c;来为大家举例…

Spring Boot助力医院数据管理

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

MySQL进阶学习一(2024.10.07版)

2024-10-06 -------------------------------------------------------------------------------------------------------------------------------- 1.一条SQL语句是如何执行的 单进程的多线程模型 MySQL的物理目录 show global variables like "%basedir%"; …

LSTM时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测

本文内容&#xff1a;Python实现LSTM长短期记忆神经网络时间序列预测&#xff0c;使用的数据集为AirPassengers 目录 数据集简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 数据集简介 AirPassengers 数据集的来源可以追溯到经典的统计和时间序列分析文献。原始数据集由 Box,…

面向对象特性中 继承详解

目录 概念&#xff1a; 定义&#xff1a; 定义格式 继承关系和访问限定符 基类和派生类对象赋值转换&#xff1a; 继承中的作用域&#xff1a; 派生类的默认成员函数 继承与友元&#xff1a; 继承与静态成员&#xff1a; 复杂的菱形继承及菱形虚拟继承&#xff1a; 虚…

VGG16模型实现MNIST图像分类

MNIST图像数据集 MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;是一个经典的机器学习数据集&#xff0c;常用于训练和测试图像处理和机器学习算法&#xff0c;特别是在数字识别领域。该数据集包含了大约 7 万张手写数字图片&#xf…

喜讯 | 攸信技术入选第六批专精特新“小巨人”企业

日前&#xff0c;根据工信部评审结果&#xff0c;厦门市工业和信息化局公示了第六批专精特新“小巨人”企业和第三批专精特新“小巨人”复核通过企业名单&#xff0c;其中&#xff0c;厦门攸信信息技术有限公司进入第六批专精特新“小巨人”企业培育。 “专精特新”企业是指具有…

图像分割恢复方法

传统的图像分割方法主要依赖于图像的灰度值、纹理、颜色等特征&#xff0c;通过不同的算法将图像分割成多个区域。这些方法通常可以分为以下几类&#xff1a; 1.基于阈值的方法 2.基于边缘的方法 3.基于区域的方法 4.基于聚类的方法 下面详细介绍这些方法及其示例代码。 1. 基…

代码随想录--栈与队列--用栈实现队列

队列是先进先出&#xff0c;栈是先进后出。 如图所示&#xff1a; 题目 使用栈实现队列的下列操作&#xff1a; push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 示例: MyQueue qu…

draw.io 设置默认字体及添加常用字体

需求描述 draw.io 是一个比较好的开源免费画图软件。但是其添加容器或者文本框时默认的字体是 Helvetica&#xff0c;一般的期刊、会议论文或者学位论文要求的英文字体是 Times New Roman&#xff0c;中文字体是 宋体&#xff0c;所以一般需要在文本字体选项里的下拉列表选择 …

分层解耦-05.IOCDI-DI详解

一.依赖注入的注解 在我们的项目中&#xff0c;EmpService的实现类有两个&#xff0c;分别是EmpServiceA和EmpServiceB。这两个实现类都加上Service注解。我们运行程序&#xff0c;就会报错。 这是因为我们依赖注入的注解Autowired默认是按照类型来寻找bean对象的进行依赖注入…

2-115 基于matlab的瞬态提取变换(TET)时频分析

基于matlab的瞬态提取变换&#xff08;TET&#xff09;时频分析&#xff0c;瞬态提取变换是一种比较新的TFA方法。该方法的分辨率较高&#xff0c;能够较好地提取出故障的瞬态特征&#xff0c;用于故障诊断领域。通过对原始振动信号设置不同信噪比噪声&#xff0c;对该方法的抗…

关于一个模仿qq通信程序

7月份的时候还在学校那个时候想要学习嵌入式Linux&#xff0c;但是还没有买开发板来玩&#xff0c;再学linux系统编程&#xff0c;网络编程&#xff0c;Linux系统的文件IO&#xff0c;于是学完之后想做一个模仿qq的通信程序于是就有了这个“ailun.exe”&#xff0c;因为暑假去打…