Day03:注意事项、this关键字、构造器、JavaBean、String、ArrayList
OOP的注意事项
- 类名要跟class文件名一致(一个class可以有多个类,但只有一个public,且与文件名一致),命名介意大驼峰;
- 如果某个对象没有变量指向他,就成垃圾对象了(空指针),但JAVA的虚拟机有垃圾GC机制(cpp没有),可以自动回收。
this关键字
- this就是一个变量,在类的方法中拿到当前对象;
- this的作用:用来解决变量名称的冲突问题。比如成员方法中的成员变量和形参:
public class Student {String name;double score;public void test(Student this){System.out.println(this);}public void printPass(double score){if(this.score >= score){System.out.println("恭喜您,您成功考入了哈佛大学~~");}else {System.out.println("很遗憾,您没有考过~~");}}
}
这个this.score和score就避免了重名。
构造器
- 也就是cpp中的构造函数
- 无参数构造器和有参数构造器(方便初始化):
public class Student {String name;double score;// 无参数构造器public Student() {System.out.println("无参数构造器");}// 有参数构造器public Student(String name, double score) {this.name = name;this.score = score;}
}
- 类在设计时如果不写构造器默认生成无参数构造器(也就是为什么写
Student s = new Student()) - 如果一旦定义了有参数构造器,就不会自动生成,这时需要自己手写一个无参数构造器;
封装
- 面向对象的三大特征:封装、继承和多态
- 封装:

- 封装的设计规范:合理隐藏(private),合理暴露(public)
- 比如对于student类:
package com.gmz;public class Student {public String name;public double score;public int grade;public void printScore() {System.out.println("Name: " + name);System.out.println("Score: " + score);System.out.println("Grade: " + grade);}}
这样不正确,我们的成员对象应该是不可见的,而是自定义set函数来设置、get函数来取:
public class Student {private String name;private double score;private int grade;public void setScore(int score){if(score < 0 || score > 100){System.out.println("Invalid score");return;}this.score = score;}public double getScore(){return score;}}
实体类JavaBean
- 实体类:
- 成员变量都是private
- 对外提供get和set方法;
- 必须有一个无参构造器
- 小技巧:IDEA右键generate自动生成set、get和构造器函数;
public class Student {private String name;private double score;private int grade;public Student() {}public Student(String name, double score, int grade) {this.name = name;this.score = score;this.grade = grade;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}
}
- 实体类的作用:数据和方法分离,比如Student存信息,StudentOperator存操作。
public class StudentOperator {private Student student;public StudentOperator(Student student){this.student = student;}public void printPass(){if(student.getScore() >= 60){System.out.println(student.getName() + "学生成绩及格");}else {System.out.println(student.getName() + "学生成绩不及格");}}
}
Java中的包
- 建包类似于建文件夹方便管理,建包的语法:
package com.gmz.javabeanpublic class Student {...
}

(相当于cpp中的include)
- IDEA的自动导包:

String类
- 全称为
java.lang.String(不需要导包)相当于cpp中的string - 创建String对象:
//最简单的直接赋值
String str = "abc";//构造器
String str = new String();String rs2 = new String("itheima");
System.out.println(rs2);char[] chars = {'a', '黑', '马'};
String rs3 = new String(chars);
System.out.println(rs3);byte[] bytes = {97, 98, 99}
String rs4 = new String(bytes);
System.out.println(rs4);
- 几个常见的字符串方法:
public static void main(String[] args) {System.out.println(new Object());// 目标:快速熟悉String提供的处理字符串的常用方法。String s = "黑马Java";// 1、获取字符串的长度System.out.println(s.length());// 2、提取字符串中某个索引位置处的字符char c = s.charAt(1);System.out.println(c);// 字符串的遍历for (int i = 0; i < s.length(); i++) {// i = 0 1 2 3 4 5char ch = s.charAt(i);System.out.println(ch);}System.out.println("-------------------");// 3、把字符串转换成字符数组,再进行遍历char[] chars = s.toCharArray();for (int i = 0; i < chars.length; i++) {System.out.println(chars[i]);}// 4、判断字符串内容,内容一样就返回trueString s1 = new String("黑马");String s2 = new String("黑马");System.out.println(s1 == s2); // falseSystem.out.println(s1.equals(s2)); // true// 5、忽略大小写比较字符串内容String c1 = "34AeFG";String c2 = "34aEfg";System.out.println(c1.equals(c2)); // falseSystem.out.println(c1.equalsIgnoreCase(c2)); // true// 6、截取字符串内容 (包前不包后的)String s3 = "Java是最好的编程语言之一";String rs = s3.substring(0, 8);// 7、从当前索引位置一直截取到字符串的末尾String rs2 = s3.substring(5);// 8、把字符串中的某个内容替换成新内容,并返回新的字符串对象给我们String info = "这个电影简直是个垃圾,垃圾电影!!";String rs3 = info.replace("垃圾", "**");// 9、判断字符串中是否包含某个关键字String info2 = "Java是最好的编程语言之一,我爱Java,Java不爱我!";System.out.println(info2.contains("Java"));System.out.println(info2.contains("java"));System.out.println(info2.contains("Java2"));// 10、判断字符串是否以某个字符串开头。String rs4 = "张三丰";System.out.println(rs4.startsWith("张"));System.out.println(rs4.startsWith("张三"));System.out.println(rs4.startsWith("张三2"));// 11、把字符串按照某个指定内容分割成多个字符串,放到一个字符串数组中返回给我们String rs5 = "张无忌,周芷若,殷素素,赵敏";String[] names = rs5.split(",");for (int i = 0; i < names.length; i++) {System.out.println(names[i]);}}
-
String使用时的注意事项(面试常考)
- String对象是不可变字符串对象,一旦创建内容不能改变(只能改后产生新的赋给另一个);
注意常量字符串会放在字符串常量池:

- 只要是以双引号给出的字符串对象,存储在常量池中,而且内容相同时只会存储一份(**节约内存)**,比如:```cppString s1 = "abc";String s2 = "abc";System.out.println(s1 == s2);```输出true。- new String创建字符串对象,每次new出来的都是一个新对象,放在堆内存中```cpp
char[] chars = {'a', 'b', 'c'};String a1 = new String(chars);String a2 = new String(chars);System.out.println(a1 == a2);
```输出false。(地址不同)- 易错题:

[外链图片转存中…(img-TUWu39Ng-1699718499323)]
ArrayList
- 已经有数组[]了,选择集合的好处:数组创建就固定了,集合大小可变(类似于cpp中的vector)
- 集合(Collection)是一种用来存储多个元素的容器。它提供了一系列的方法供我们对其中的元素进行操作,包括添加、删除、遍历等。Java中的集合框架提供了多种集合类,如ArrayList、LinkedList、HashSet等。
- ArrayList的构造方法:
ArrayList<String> list = new ArrayList<>();
new后面尖括号中的String省略不写从JDK 1.7开始支持;
这样就指定了ArrayList(范型类)中只能添加类型为String的元素,如果是:
ArrayList list = new ArrayList();
就可以添加各种类型的元素(最好不要)。
- ArrayList的相关操作:增删查改:
//1. 往末尾插入元素
list.add("黑马");
list.add(“jav”);// 打印arrayList
System.out.println(list);// 2、往集合中的某个索引位置处添加一个数据
list.add(1, "MySQL");// 3、根据索引获取集合中某个索引位置处的值
String rs = list.get(1);// 4、获取集合的大小(返回集合中存储的元素个数)
System.out.println(list.size());// 5、根据索引删除集合中的某个元素值,会返回被删除的元素值给我们
System.out.println(list.remove(1));// 6、直接删除某个元素值,删除成功会返回true,反之
System.out.println(list.remove("Java"));
// 默认删除的是第一次出现的这个黑马的数据的
System.out.println(list.remove("黑马"));// 7、修改某个索引位置处的数据,修改后会返回原来的ArrayList给我们
System.out.println(list.set(1, "黑马程序员"));
- 这里注意list.remove(“黑马”)删除的是第一次出现的黑马字符串。
- 注意list.size()有括号,length没括号!!!(cpp中两个都有括号)
相关文章:
Day03:注意事项、this关键字、构造器、JavaBean、String、ArrayList
OOP的注意事项 类名要跟class文件名一致(一个class可以有多个类,但只有一个public,且与文件名一致),命名介意大驼峰;如果某个对象没有变量指向他,就成垃圾对象了(空指针)…...
【从0到1设计一个网关】性能优化---缓存
文章目录 为什么要用缓存?Caffeine Cache使用Caffeine效果演示为什么要用缓存? 首先先了解一下为什么在网关中我们需要用到缓存。 我们可以从如下几点来入手这个问题: 处理大规模流量: 网关是系统的入口,需要处理大规模的请求流量。高性能的网关能够快速而有效地处理大量…...
Typescript -尚硅谷
基础 1.ts是以js为基础构建的语言,是一个js的超集(对js进行了扩展); 2.ts(type)最主要的功能是在js的基础上引入了类型的概念; Js的类型是只针对于值而言,ts的类型是针对于变量而言 Ts可以被编译成任意版本的js,从而进一步解决了…...
以 Kubernetes 原生方式实现多集群告警
作者:向军涛、雷万钧 来源:2023 上海 KubeCon 分享 可观测性来源 在 Kubernetes 集群上,各个维度的可观测性数据,可以让我们及时了解集群上应用的状态,以及集群本身的状态。 Metrics 指标:监控对象状态的量…...
2023年A股借壳上市研究报告
第一章 借壳上市概况 1.1 定义 借壳上市作为一种独特的资本市场操作手法,历来是企业拓展融资渠道和实现市场战略目标的重要途径。具体来说,借壳上市可分为狭义与广义两种模式。在狭义的定义下,借壳上市是指一家已上市的公司的控股母公司&am…...
【TiDB】TiDB CLuster部署
目录 0 大纲 一 集群部署工具TiUP简介 1 TiUP 简介 2 TiUP使用 3 TiUP使用举例 二 TiDB Cluster安装配置需求 1 生产环境硬件需求 2 操作系统需求 三 TIDB部署 1 软硬件需求以及前置检查编辑 2 安装TiUP 组件 3 集群拓扑文件 4 执行部署命令 (1&…...
odoo16 库存初始化 excel导入问题
最近在为一家公司实施odoo时,发现库存模块实施过程中按用户实际,产品初始化就是个问题。下面一一记录下 一个新公司,产品都有上百种,甚致几千种,如何把现有产品数据录入系统就是个不小的活。odoo16是有导入导出功能不…...
2023.11.11 关于 Spring 中 Bean 的作用域
目录 Bean 的作用域 作用域的定义 Singleton(单例作用域) Prototype(原型作用域) Request(请求作用域) Session(会话请求) Application(全局作用域) …...
5 Paimon数据湖之表数据查询详解
更多Paimon数据湖内容请关注:https://edu.51cto.com/course/35051.html 虽然前面我们已经讲过如何查询Paimon表中的数据了,但是有一些细节的东西还需要详细分析一下。 首先是针对Paimon中系统表的查询,例如snapshots\schemas\options等等这些…...
时间序列预测实战(十二)DLinear模型实现滚动长期预测并可视化预测结果
官方论文地址->官方论文地址 官方代码地址->官方代码地址 个人修改代码->个人修改的代码已经上传CSDN免费下载 一、本文介绍 本文给大家带来是DLinear模型,DLinear是一种用于时间序列预测(TSF)的简单架构,DLinear的核…...
封神教程:腾讯云3年轻量应用服务器老用户购买方法
腾讯云轻量应用服务器特价是有新用户限制的,所以阿腾云建议大家选择3年期轻量应用服务器,一劳永逸,免去续费困扰。腾讯云轻量应用服务器3年优惠可以选择2核2G4M和2核4G5M带宽,3年轻量2核2G4M服务器540元,2核4G5M轻量应…...
Ubuntu(WSL2) 安装最新版的 cmake
Ubuntu(WSL) 安装最新版的 cmake 具体流程如下: 步骤一:卸载原本的 cmake sudo apt-get remove cmake 步骤二: sudo apt-get update sudo apt-get install apt-transport-https ca-certificates gnupg software-properties-common wget 步…...
Android---内存泄漏的优化
内存泄漏是一个隐形炸弹,其本身并不会造成程序异常,但是随着量的增长会导致其他各种并发症:OOM,UI 卡顿等。 为什么要将 Activity 单独做预防? 因为 Activity 承担了与用户交互的职责,因此内部需要持有大…...
C/S架构学习之基于UDP的本地通信(客户机)
基于UDP的本地通信(客户机):创建流程:一、创建数据报式套接字(socket函数): int sock_fd socket(AF_UNIX,SOCK_DGRAM,0);if(-1 sock_fd){perror("socket error");exit(-1);}二、创建…...
【性能测试】服务端中间件docker常用命令解析整理(详细)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、搜索 docker …...
【探索Linux】—— 强大的命令行工具 P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)
阅读导航 引言一、进程间通信概念二、进程间通信目的三、进程间通信分类四、管道1. 什么是管道2. 匿名管道(1)创建和关闭⭕pipe() 函数⭕创建匿名管道⭕关闭匿名管道 (2)通信方式(3)用法示例(4&…...
图论12-无向带权图及实现
文章目录 带权图1.1带权图的实现1.2 完整代码 带权图 1.1带权图的实现 在无向无权图的基础上,增加边的权。 使用TreeMap存储边的权重。 遍历输入文件,创建TreeMap adj存储每个节点。每个输入的adj节点链接新的TreeMap,存储相邻的边和权重 …...
每日一题(LeetCode)----数组--有序数组的平方
每日一题(LeetCode)----数组–有序数组的平方 1.题目([977. 有序数组的平方](https://leetcode.cn/problems/sqrtx/)) 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。…...
SpringCloud微服务:Eureka
目录 提供者与消费者 服务调用关系 eureka的作用 在Eureka架构中,微服务角色有两类 Eureka服务 提供者与消费者 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)服务消费者:一次业务中,调用其它微服务的服务。(调…...
19.删除链表的倒数第N个结点(LeetCode)
想法一 先用tail指针找尾,计算出节点个数,再根据倒数第N个指定删除 想法二 根据进阶的要求,只能遍历一遍链表,那刚刚想法一就做不到 首先,我们要在一遍内找到倒数第N个节点,所以我们设置slow和fast两个指…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
