Java面向对象编程基础(二)
Java面向对象编程基础二
- 一、package与import关键字的使用
- 1.说明
- 2.包的作用
- 3.JDK中主要的包
- 4. import
- 5.import关键字的使用
- 二、封装性
- 1.为什么要封装?
- 2.如何封装?
- 3.作用
- 4.权限修饰符的权限大小
- 5.案例
- 三、构造器
- 1 构造器的使用说明
- 2 案例:
- 四、实例变量赋值过程
- 1 在类的属性中,可以有哪些位置给属性赋值?
- 2 JavaBean
- 五、随堂复习与企业真题
一、package与import关键字的使用
1.说明
a、package:包
b、package用于指明该文件中定义的类、接口等结构所在的包
c、一个源文件只能有一个声明包的package语句
d、package语句作为Java源文件的第一条语句出现。若缺省该语句,则指定为无名包。
e、包名,属于标识符,满足标识符命名的规则和规范(全部小写)、见名知意
包通常使用所在公司域名的倒置:com.atguigu.xxx。
大家取包名时不要使用"‘java.xx`"包
f、包对应于文件系统的目录,package语句中用“.”来指明包(目录)的层次,每.一次就表示一层文件目录。
g、同一个包下可以声明多个结构(类、接口),但是不能定义同名的结构(类、接口)。不同的包下可以定义同名的结构
2.包的作用
a、包可以包含类和子包,划分项目层次,便于管理
b、帮助管理大型软件系统:将功能相同的类划分到同一个包中。比如:MVC的设计模式
c、解决类命名冲突的问题
d、控制访问权限
3.JDK中主要的包
java.lang:包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
java.net:包含执行与网络相关的操作的类和接口。
java.io:包含能提供多种输入/输出功能的类。
java.util:包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
java.text:包含了一些java格式化相关的类
java.sql:包含了java进行JDBC数据库编程的相关类/接口
4. import
为了使用定义在其它包中的Java类,需用import语句来显式引入指定包下所需要的类。相当于import语句告诉编译器到哪里去寻找这个类。
语法格式
import 包名.类名;
应用举例
import pack1.pack2.Test;//import pack1.pack2.*;表示引入pack1.pack2包中的所有结构
5.import关键字的使用
a、import语句来显式引入指定包下所需要的类。相当于import语句告诉编译器到哪里去寻找这个类
。
b、import语句,声明在包的声明和类的声明之间。
c、如果需要导入多个类或接口,那么就并列显式多个import语句即可
d、如果使用a.*
导入结构,表示可以导入a包下的所有的结构。举例:可以使用java.util.*的方式,一次性导入util
e、如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。例如(System、String)
f、如果已经导入java.a包下的类,那么如果需要使用a包的子包下的类的话,仍然需要导入。
g、如果在代码中使用不同包下的同名的类,那么就需要使用类的全类名的方式指明调用的是哪个类。
二、封装性
1.为什么要封装?
高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅暴露少量的方法给外部使用,尽量方便外部调用。
通俗的讲,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
2.如何封装?
权限修饰符:private、缺省、protected、public
3.作用
我们可以使用4种权限修饰来修饰类及类的内部成员。当这些成员被调用时,体现可见性的大小。
在题目中,我们给Animal的对象的legs属性赋值。在实际的常识中,我们知道legs不能赋值为负数的。但是如果直接调用属性legs,是不能加入判断逻辑的。那怎么办呢?
举例:
将legs属性私有化(private),禁止在Animal类的外部直接调用此属性
提供给legs属性赋值的setLegs()方法,在此方法中加入legs赋值的判断逻辑if(legs>=0 && legs % 2 == 0);将此方法暴露出去,使得在Animal类的外部调用此方法,对legs属性赋值。
提供给legs属性获取getLegs()方法,此方法对外暴露,使得在Animal类的外部还可以调用此属性的值。
package com.method_more;/*** package:com.method_more** @Author jimmy-yan* @Create 2024/10/15 16:45*/
public class AnimalTest {public static void main(String[] args) {Animal an = new Animal();an.name = "狗";an.eat();//todo 因为legs声明为private,是私有的,出了Animal类之外就不能用了//an.legs=5;//只能通过setLegs()方法去调用an.setLegs(4);an.getLegs();}
}class Animal {String name; //姓名private int legs; //几条腿//设置legs属性值public void setLegs(int l) {if (l >= 0 && l % 2 == 0) {legs = l;} else {System.out.println("不符合规则");}}//获取legs属性值public int getLegs() {return legs;}public void eat() {System.out.println("吃");}
}
4.权限修饰符的权限大小
类:只能使用public、缺省修饰
类的内部成员:可以使用4种权限修饰进行修饰
public class AnimalTest {public static void main(String[] args) {}
}class Animal {String name; //姓名private int legs; //几条腿
}
开发中4种权限使用频率的情况:
比较高:public、private
比较低:缺省、protected
5.案例
1、创建程序,在其中定义两个类:Person和PersonTest类。定义如下:
用setAge()设置人的合法年龄(0~130),用getAge()返回人的年龄。
在PersonTest类中实例化Person类的对象b,调用setAge()和getAge()方法,体会Java的封装性。
package com.method_more;/*** package:com.method_more** @Author jimmy-yan* @Create 2024/10/15 18:29*/
public class PersonTest {public static void main(String[] args) {Person p = new Person();p.setAge(10);System.out.println(p.getAge());}
}class Person {private int age;public void setAge(int a) {if (a > 130 || a < 0) {System.out.println("不符合规定");} else {age = a;}}public int getAge() {return age;}
}
2:自定义图书类
设定属性包括:
书名bookName,
作者author,
价格price;
方法包括:
相应属性的get/set方法,
图书信息介绍等。
package com.method_more;/*** package:com.method_more** @Author jimmy-yan* @Create 2024/10/15 18:40*/
public class BookTest {public static void main(String[] args) {Book book = new Book();book.setPrice(10);System.out.println(book.getPrice());}
}class Book {String bookName;double price;public void setPrice(double p) {price = p;}public double getPrice() {return price;}
}
三、构造器
作用:搭配new关键字,创建类的对象;在创建对象的同时可以给对象的相关属性赋值。
1 构造器的使用说明
a、构造器声明格式:
权限修饰符 类名(形参列表){}
b、创建类以后,在没有显示提供任何构造器的情况下,会默认提供一个空参构造器,且构造器的权限与类声明的权限相同。
package com.constructior.exer1;/*** package:com.constructior.exer1.exer1** @Author jimmy-yan* @Create 2024/10/15 19:02*/
public class Person {//属性String name;int age;//构造器public Person(){}public void eat(){System.out.println("吃饭呢");}public void sleep(int hour){System.out.println("睡觉+"+hour+"小时");}
}
package com.constructior.exer1;/*** package:com.constructior.exer1** @Author jimmy-yan* @Create 2024/10/15 19:10*/
public class PersonTest {public static void main(String[] args) {Person p = new Person();p.eat();}
}
c、一旦类中声明了构造器,则系统不再提供默认的空参构造器
d、一个类中可以声明多个构造器,彼此之间构成重载
2 案例:
(1)定义Student类,有4个属性:
String name;
int age;
String school;
String major;
(2)定义Student类的3个构造器:
第一个构造器Student(String n,int a)设置类的name和age属性;
第二个构造器Student(String n,int a,String s)设置类的name, age 和school属性;
第三个构造器Student(String n,int a,String s,String m)设置类的name,age ,school和major属性;
(3)在main方法中分别调用不同的构造器创建的对象,并输出其属性值。
package com.constructior.exer1.exer2;/*** package:com.constructior.exer1.exer2** @Author jimmy-yan* @Create 2024/10/15 19:25*/
public class Student {//属性String name;int age;String school;String major;public Student(String n, int a) {name = n;age = a;}public Student(String n, int a, String s) {name = n;age = a;school = s;}public Student(String n, int a, String s, String m) {name = n;age = a;school = s;major = m;}
}
package com.constructior.exer1.exer2;/*** package:com.constructior.exer1.exer2** @Author jimmy-yan* @Create 2024/10/15 19:30*/
public class StudentTest {public static void main(String[] args) {Student s1 = new Student("kobe", 18);Student s2 = new Student("kobe", 18, "清华");Student s3 = new Student("kobe", 18, "清华", "tester");}
}
四、实例变量赋值过程
1 在类的属性中,可以有哪些位置给属性赋值?
a、默认初始化;
b、显示初始化;
c、构造器初始化;
d、通过对象.方法的方法赋值;
e、通过对象.属性赋值;
2 JavaBean
所谓JavaBean,是指符合如下标准的Java类:
- 类是公共的
- 有一个无参的公共的构造器
- 有属性,且有对应的get、set方法
五、随堂复习与企业真题
1、面向对象与面向过程
2、类、对象
- 类:抽象的,概念上的定义
- 对象:具体的,类的一个一个的实例。
- 面向对象完成具体功能的操作的三步流程(非常重要)
步骤1:创建类,并设计类的内部成员(属性、方法)
步骤2:创建类的对象。比如:Phone p1=new Phone();
步骤3:通过对象,调用其内部声明的属性或方法,完成相关的功能
3、Java中内存结构划分
- 栈、堆、方法区
- 栈:以栈帧为基本单位,有入栈和出栈操作;每个栈帧入栈操作对应一个方法的执行;方法内的局部变量会存储在栈帧中。
- 堆:new出来的结构(数组、对象):1、数组的元素在堆中,对象的成员变量在堆中。
- 方法区:加载的类的模板结构
4、类的成员之一:属性(成员变量)
属性与成员变量的对比:
- 声明的位置不同
- 内存中存放的位置不同
- 作用域不同
- 权限修饰符不同
- 初始化值不同
- 生命周期不同
5、类的成员之二:方法
方法的声明:权限修饰符 返回值类型 方法名(形参列表){方法体}
- 返回值类型
- 形参列表
6、方法的重载
两同一不同:同一个类,方法名相同;形参列表不同;
7、可变个数形参的方法
格式:(int … args)
8、方法的参数传递机制
- 如果形参是基本数据类型的变量,则将实参保存的数据值赋给形参
如果形参是引用数据类型的变量,则将实参保存的地址值赋给形参
9、对象数组
String[];Person[];
10、package、import
11、面向对象之:封装性
- java规定了4种权限修饰,分别是:private、缺省、protected、public
- 我们可以使用4种权限修饰符来修饰类及类内部的成员。当这些成员被调用时,体现可见性的大小。
- 举例:
场景1:private:提供公共的get、set方法,对此属性进行获取和修改
场景2:将类中不需要对外暴露的方法,设置为private
场景3:单例模式中构造器private,避免在类的外部创建实例
- 高内聚:java程序通常以类的形态呈现,相关的功能封装到方法中。
- 低耦合:给相关的类、方法设置权限,把该隐藏的隐藏起来,该暴露的暴露出去。
12、类的成员之三:构造器
- 如何定义:权限修饰符 类名(形参列表){}
- 构造器的作用:1、搭配new,用来创建对象;2、初始化对象的成员变量
相关文章:

Java面向对象编程基础(二)
Java面向对象编程基础二 一、package与import关键字的使用1.说明2.包的作用3.JDK中主要的包4. import5.import关键字的使用 二、封装性1.为什么要封装?2.如何封装?3.作用4.权限修饰符的权限大小5.案例 三、构造器1 构造器的使用说明2 案例: 四、实例变量赋值过程1 …...

[PHP]重复的Notice错误信息
<?php $a []; var_dump($a[name]);执行结果: 原因: display_errors和error_reporting都打开了Notice错误信息...

2024年第四届“网鼎杯”网络安全大赛-赛前模拟训练
文章目录 网络安全(WEB)签到题WEB01WEB02 二进制漏洞安全(PWN)PWN01潜在的安全漏洞分析攻击步骤exp 逆向工程(REVERSE)REVERSE01代码分析重构密码 密码学(CRYPTO)CRYPTO01CRYPTO02 杂…...

AI金融攻防赛:YOLO理论学习及赛题进阶思路(DataWhale组队学习)
引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。本文主要讲解如何在金融场景凭证篡改检测中应用YOLO算法。我们将从模型概述、数据准备、训练流程以及模…...

Spring Security 基础配置详解(附Demo)
目录 前言1. 基本知识2. Demo3. 实战 前言 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 HttpSecurity 是 Spri…...

代码随想录打卡Day1
文章目录 day011 数组理论基础2 二分查找法3 移除元素4 平方数 day01 Java JDK是17.0.11 1 数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。 数组下标都是从0开始的。 数组内存空间的地址是连续的。 因为数组在内存空间的地址是连续的,所以我们…...

Vue快速创建工程+Element Plus
创建Vue工程 执行命令 npm init vuelatest 执行这两个绿色的命令 执行这个命令启动 npm run dev Element 打开网站https://element-plus.org/zh-CN/ npm install element-plus --save 然后在vscode中打开你的项目工程 // main.ts import { createApp } from vue import Ele…...

汽车管理系统——主界面制作
目录 主界面需要有什么?然后要做什么?添加两个主菜单(声明)下一步应该干什么?能够跳转到文件有哪几个动作?动作如何声明?为什么用选择声明指针,不选择直接声明这个对象? …...
C++ 右值引用深入理解:特性、优化与底层
目录 一、左右值的概念及右值的种类 二、左值引用与右值引用 左值引用给右值取别名: 右值引用给左值取别名: 三、引用的意义及左值引用的场景 四、移动构造: 右值引用在底层里的实现: 一、左右值的概念及右值的种类 在 C …...
C# 文件操作
文章目录 文件系统FileInfo和DirectoryInfo类完成一个文件的拷贝判断一个文件是否存在FileInfo和DirectoryInfo的属性列表FileInfo和DirectoryInfo的方法列表读写文件文件系统 下面的类用于浏览文件系统和执行操作,比如移动,复制和删除文件。 System.MarshalByRefObject 这个…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发三 :安装QT5.14.2, 并将QT集成 到 VS2019中。
一,安装QT, 重点:在安装QT的时候要安装msvc201x版本的组件, 二 , 安装 qt-vs-tools Index of /development_releases/vsaddin/2.8.1 三,需要安装过 windows10 SDK,一般我们在安装vs2019的时候就…...

Linux 累加计算递归算法汇编实现
1...n可以使用公式计算,同时也是递归实现的很好例子,其c实现代码为 int f(int i) {i && (if(i-1));return i; } 其终止条件为0,此时i && (if(i-1))表达式不成立,不计算if(i-1)直接返回0&…...

明日周刊-第23期
十月已过半,气温也转凉了,大家注意保温哦。冬吃萝卜,夏吃姜,在快要到来的冬季大家可以选择多吃点萝卜。 配图是本周末去商场抓娃娃的时候拍的照片,现在抓娃娃单次普遍都控制在1块钱以下了,还记得多年前的抓…...

kubernets(二)
集群操作 查看集群信息 kubectl get查看各组件信息 格式:kubectl get 资源类型 【资源名】 【选项】 events #查看集群中的所有日志信息 -o wide # 显示资源详细信息,包括节点、地址... -o yaml/json #将当前资源对象输出至 yaml/json 格式文…...
《YOLO 标注工具全览》
《YOLO 标注工具全览》 一、YOLO 标注工具的重要性二、常见的 YOLO 标注工具介绍(一)LabelImg(二)Yolo_Label(三)在线标注工具 Make Sense(四)Ybat - YOLO BBox Annotation Tool&…...

财富思维学习
四大象限: 人类财富创造史经历的五个阶段: 1、黄色(土地)财务阶段:拥有土地和劳动力是财富的要求 2、蓝色(海)财富阶段:谁拥有贸易的通道谁就拥有财富(如港口ÿ…...

python爬虫加解密分析及实现
第一种: 1、找到加密的接口地址,通过加密的接口地址全局搜索 2、通过打断点的方式,操作页面,跑到断点处时,即可找到加密串,如图二; 3、找到用的是哪种加密方式,如: cr…...

用Java做智能客服,基于私有知识库
构建Java智能客服系统的整体思路 使用Java构建智能客服系统的整体思路是: 首先将客服QA文档以Word形式导入到系统中,通过向量化处理存入知识库。 当用户提出问题时,系统会根据问题内容从知识库中检索相关的上下文信息,并结合大…...

软考(网工)——网络安全
文章目录 🕐网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型 🕑现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 🕒Hash …...

如何给手机换ip地址
在当今数字化时代,IP地址作为设备在网络中的唯一标识,扮演着举足轻重的角色。然而,有时出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。本文将详细介绍几种实用的方法,帮助您轻松实现手机IP…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...