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

news2024/10/7 17:22:03

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和默认
        //但是不能访问private
        System.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 默认 private
        System.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.coloradmin.cn/o/2194586.html

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

相关文章

【英语】5. 考研英语语法体系

文章目录 前言句字的成分一、常规句型简单句&#xff08;5 种&#xff09;1. 定义&#xff1a;句子中只包含 *一套主谓结构* 的句子。&#xff08;一个句子只能有一个谓语动词&#xff09;2. 分类 并列句&#xff08;由关联词组成&#xff09;&#xff08;3 种&#xff09;基本…

Unity Shader Graph基础包200+节点及术语解释

目录 Master Stack: Vertex block&#xff1a; Fragment block​编辑 Alpha Clip Threshold Dither transparency Graph Inspector Texture 2d Array/Texture 3d Virtual Texture Sampler State Keywords Boolean keyword 右键显示所有节点 简化测试系列节点&#x…

[SpringBoot] 苍穹外卖--面试题总结--上

前言 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解&#xff08;一&#xff09;-CSDN博客 3--苍穹外卖-SpringBoot项目中员工管理 详解&#xff08;二&#xff09;-CSDN博客 4--苍穹外码-SpringBoot项目中分类管理 详…

ThreeJS入门(091):THREE.PositionalAudio 知识详解,示例代码

作者&#xff1a; 还是大剑师兰特 &#xff0c;曾为美国某知名大学计算机专业研究生&#xff0c;现为国内GIS领域高级前端工程师&#xff0c;CSDN知名博主&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;webgl&#xff0c;ThreeJS&#xff0c;canvas&#xf…

二叉树—相关结构

1.相关的结构问题&#xff08;分治递归&#xff09; 1.1节点个数 1.2叶子结点个数 叶子结点&#xff1a;没有孩子的节点 1.3树的高度&#xff08;深度&#xff09; 1.4二叉树第k层的节点个数 1.5二叉树查找值为x的节点 2.二叉树的创建和销毁 2.1二叉树的构建 二叉树遍历_牛客…

mysql语句执行过程

具体流程如下: 1】当客户端的SOL发送到MySQL时&#xff0c;首先是到达服务器层的连接器&#xff0c;连接器会对你此次发起的连接进行权限校验&#xff0c;以此来获取你这个账号拥有的权限。当你的账号或密码不正确时&#xff0c;会报用户错误。连接成功如果后续没有任何操作&am…

xlwings直接读取使用区域的数据

这里的读取方法&#xff0c;不用最大行号最大列号&#xff0c;直接使用used_range对应的方法 代码如下&#xff1a; import xlwings as xwfile_path r...\AAA.xlsx# 实例化app&#xff0c;打开文件 app_e xw.App(VisibleFalse,add_bookFalse) work_book appe.books.open(f…

New Phytologist | 中国科学院地理所:菌根共生途径塑造树木根经济空间

本文首发于“生态学者”微信公众号&#xff01; 根经济空间是环境驱动下一系列根属性复杂互作的结果&#xff0c;本质上反映了植物地下碳&#xff08;“货币”&#xff09;投资与养分&#xff08;“商品”&#xff09;收益的多维策略权衡关系&#xff08;图1&#xff09;。然而…

【java】数据类型与变量以及操作符

各位看官&#xff1a;如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论&#xff0c;感谢您的支持&#xff01;&#xff01;&#xff01; 目录 一.字面变量&#xff1a; 二&#xff1a;数据类型 1.1&#xff1a;int类型&#xff1a;&#xff0…

高速机器人的点动与直线运动

工业机器人中的点动和直线运动非常之重要&#xff0c;接下来说一下他们的实现过程。 点动&#xff1a; 点动包括两个部分&#xff0c;第一个点动是每一个关节电机的点动&#xff0c;第二个是机器末端向xyz的三个方向进行点动处理。 第一个点动是非常简单的&#xff0c;即把对…

IO系列-3 NIO基本概念:Buffer和Channel和Selector

1.缓冲区 1.1 Buffer类介绍 java在BIO中通常使用字节数组byte[]和字符数组char[]实现数据传输&#xff0c;在NIO中&#xff0c;引入了缓冲区Buffer进行数据传输&#xff0c;相对数组提供了更多的属性和API.Buffer在java.nio包中引入&#xff0c;Buffer对于常见的类型有对应的…

【C++指南】类和对象(二):类的默认成员函数——全面剖析 :构造函数

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 ​ 阅读本篇文章之前&#xff0c;你需要具备的前置知识&#xff1a;类和对象的基础 点击下方链接 【C指南…

Stable Diffusion的核心插件—ControlNet!万字长文解读!

前言 一、介绍 论文地址&#xff1a;[https://arxiv.org/abs/2302.05543](https://arxiv.org/abs/2302.05543 "https://arxiv.org/abs/2302.05543")代码地址&#xff1a;[GitHub - lllyasviel/ControlNet: Let us control diffusion models!](https://github.com/ll…

Python和C++胶体粒子三维残差算法模型和细化亚像素算法

&#x1f3af;要点 使用信噪比、对比度噪声比和点扩展函数量化实验数据&#xff0c;增强共聚焦显微镜成像。参考粒子跟踪算法&#xff1a;使用二维和三维径向模型细化亚像素。胶体粒子三维图形分割学习模型模拟检测球形胶体。使用网格搜索优化模型和归一化处理以避免光漂白。 …

idear 控制台乱码、查询结果、参数、控制台乱码

一、 -Dfile.encodingUTF-8 二、 三、 四、 五、

【区间选点】

题目 代码 左端点排序区间合并 #include <bits/stdc.h> using namespace std; #define null -0x3f3f3f3f #define x first #define y second typedef pair<int, int> PII; const int N 1e510; vector<PII> v; int main() {int n;cin >> n;for(int i…

LLM大模型企业应用实战-“消灭”LLM幻觉的利器

大模型一定程度改变了我们生活工作的思考方式&#xff0c;越来越多的个人和企业在思考如何将大模型应用到更加实际的生产生活。 1 LLM的问题 1.1 幻觉 LLM因为是一个预训练模型&#xff0c;它已有一些知识储备&#xff0c;我们提的问题跟他的知识储备不相符时&#xff0c;会…

当管理遇上AI,工作效率翻了3倍!

最近这段时间&#xff0c;很多企业都开始降薪、裁员。 在降本增效的大背景下&#xff0c;企业但凡有什么大动作&#xff0c;压力往往都会转嫁到管理者的身上。 一方面&#xff0c;要调大家的状态&#xff0c;处理团队中的各种琐事&#xff1b;另一方面&#xff0c;要及时响应…

C++ : STL容器之string剖析

STL容器之string剖析 一、string 的迭代器&#xff08;一&#xff09;起始迭代器&#xff08;二&#xff09;末尾迭代器&#xff08;三&#xff09;反向迭代器 二、容量相关的函数&#xff08;一&#xff09;size&#xff08;二&#xff09;capacity&#xff08;三&#xff09;…

Unity3d使用JsonUtility.FromJson读取json文件

使用JsonUtility.FromJson方法不需要额外引用第三方库。该方法只能读取json对象&#xff0c;而不能读取json数组。 假如我们有如下的json数组&#xff1a; [ {"id":1, "name":"first2021", "level":5, "score":100, "…