当前位置: 首页 > news >正文

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()
  • 如果一旦定义了有参数构造器,就不会自动生成,这时需要自己手写一个无参数构造器;

封装

  • 面向对象的三大特征:封装、继承和多态
  • 封装:

image

  • 封装的设计规范:合理隐藏(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 {...
}

image

(相当于cpp中的include)

  • IDEA的自动导包:

image

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对象是不可变字符串对象,一旦创建内容不能改变(只能改后产生新的赋给另一个);

    注意常量字符串会放在字符串常量池:

image

- 只要是以双引号给出的字符串对象,存储在常量池中,而且内容相同时只会存储一份(**节约内存)**,比如:```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。(地址不同)- 易错题:

image

[外链图片转存中…(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文件名一致&#xff08;一个class可以有多个类&#xff0c;但只有一个public&#xff0c;且与文件名一致&#xff09;&#xff0c;命名介意大驼峰&#xff1b;如果某个对象没有变量指向他&#xff0c;就成垃圾对象了&#xff08;空指针&#xff09…...

【从0到1设计一个网关】性能优化---缓存

文章目录 为什么要用缓存?Caffeine Cache使用Caffeine效果演示为什么要用缓存? 首先先了解一下为什么在网关中我们需要用到缓存。 我们可以从如下几点来入手这个问题: 处理大规模流量: 网关是系统的入口,需要处理大规模的请求流量。高性能的网关能够快速而有效地处理大量…...

Typescript -尚硅谷

基础 1.ts是以js为基础构建的语言&#xff0c;是一个js的超集(对js进行了扩展)&#xff1b; 2.ts(type)最主要的功能是在js的基础上引入了类型的概念; Js的类型是只针对于值而言&#xff0c;ts的类型是针对于变量而言 Ts可以被编译成任意版本的js&#xff0c;从而进一步解决了…...

以 Kubernetes 原生方式实现多集群告警

作者&#xff1a;向军涛、雷万钧 来源&#xff1a;2023 上海 KubeCon 分享 可观测性来源 在 Kubernetes 集群上&#xff0c;各个维度的可观测性数据&#xff0c;可以让我们及时了解集群上应用的状态&#xff0c;以及集群本身的状态。 Metrics 指标&#xff1a;监控对象状态的量…...

2023年A股借壳上市研究报告

第一章 借壳上市概况 1.1 定义 借壳上市作为一种独特的资本市场操作手法&#xff0c;历来是企业拓展融资渠道和实现市场战略目标的重要途径。具体来说&#xff0c;借壳上市可分为狭义与广义两种模式。在狭义的定义下&#xff0c;借壳上市是指一家已上市的公司的控股母公司&am…...

【TiDB】TiDB CLuster部署

目录 0 大纲 一 集群部署工具TiUP简介 1 TiUP 简介 2 TiUP使用 3 TiUP使用举例 二 TiDB Cluster安装配置需求 1 生产环境硬件需求 2 操作系统需求 三 TIDB部署 1 软硬件需求以及前置检查​编辑 2 安装TiUP 组件 ​3 集群拓扑文件 4 执行部署命令 &#xff08;1&…...

odoo16 库存初始化 excel导入问题

最近在为一家公司实施odoo时&#xff0c;发现库存模块实施过程中按用户实际&#xff0c;产品初始化就是个问题。下面一一记录下 一个新公司&#xff0c;产品都有上百种&#xff0c;甚致几千种&#xff0c;如何把现有产品数据录入系统就是个不小的活。odoo16是有导入导出功能不…...

2023.11.11 关于 Spring 中 Bean 的作用域

目录 Bean 的作用域 作用域的定义 Singleton&#xff08;单例作用域&#xff09; Prototype&#xff08;原型作用域&#xff09; Request&#xff08;请求作用域&#xff09; Session&#xff08;会话请求&#xff09; Application&#xff08;全局作用域&#xff09; …...

5 Paimon数据湖之表数据查询详解

更多Paimon数据湖内容请关注&#xff1a;https://edu.51cto.com/course/35051.html 虽然前面我们已经讲过如何查询Paimon表中的数据了&#xff0c;但是有一些细节的东西还需要详细分析一下。 首先是针对Paimon中系统表的查询&#xff0c;例如snapshots\schemas\options等等这些…...

时间序列预测实战(十二)DLinear模型实现滚动长期预测并可视化预测结果

官方论文地址->官方论文地址 官方代码地址->官方代码地址 个人修改代码->个人修改的代码已经上传CSDN免费下载 一、本文介绍 本文给大家带来是DLinear模型&#xff0c;DLinear是一种用于时间序列预测&#xff08;TSF&#xff09;的简单架构&#xff0c;DLinear的核…...

封神教程:腾讯云3年轻量应用服务器老用户购买方法

腾讯云轻量应用服务器特价是有新用户限制的&#xff0c;所以阿腾云建议大家选择3年期轻量应用服务器&#xff0c;一劳永逸&#xff0c;免去续费困扰。腾讯云轻量应用服务器3年优惠可以选择2核2G4M和2核4G5M带宽&#xff0c;3年轻量2核2G4M服务器540元&#xff0c;2核4G5M轻量应…...

Ubuntu(WSL2) 安装最新版的 cmake

Ubuntu(WSL) 安装最新版的 cmake 具体流程如下&#xff1a; 步骤一&#xff1a;卸载原本的 cmake sudo apt-get remove cmake 步骤二&#xff1a; sudo apt-get update sudo apt-get install apt-transport-https ca-certificates gnupg software-properties-common wget 步…...

Android---内存泄漏的优化

内存泄漏是一个隐形炸弹&#xff0c;其本身并不会造成程序异常&#xff0c;但是随着量的增长会导致其他各种并发症&#xff1a;OOM&#xff0c;UI 卡顿等。 为什么要将 Activity 单独做预防&#xff1f; 因为 Activity 承担了与用户交互的职责&#xff0c;因此内部需要持有大…...

C/S架构学习之基于UDP的本地通信(客户机)

基于UDP的本地通信&#xff08;客户机&#xff09;&#xff1a;创建流程&#xff1a;一、创建数据报式套接字&#xff08;socket函数&#xff09;&#xff1a; int sock_fd socket(AF_UNIX,SOCK_DGRAM,0);if(-1 sock_fd){perror("socket error");exit(-1);}二、创建…...

【性能测试】服务端中间件docker常用命令解析整理(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、搜索 docker …...

【探索Linux】—— 强大的命令行工具 P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)

阅读导航 引言一、进程间通信概念二、进程间通信目的三、进程间通信分类四、管道1. 什么是管道2. 匿名管道&#xff08;1&#xff09;创建和关闭⭕pipe() 函数⭕创建匿名管道⭕关闭匿名管道 &#xff08;2&#xff09;通信方式&#xff08;3&#xff09;用法示例&#xff08;4&…...

图论12-无向带权图及实现

文章目录 带权图1.1带权图的实现1.2 完整代码 带权图 1.1带权图的实现 在无向无权图的基础上&#xff0c;增加边的权。 使用TreeMap存储边的权重。 遍历输入文件&#xff0c;创建TreeMap adj存储每个节点。每个输入的adj节点链接新的TreeMap&#xff0c;存储相邻的边和权重 …...

每日一题(LeetCode)----数组--有序数组的平方

每日一题(LeetCode)----数组–有序数组的平方 1.题目&#xff08;[977. 有序数组的平方](https://leetcode.cn/problems/sqrtx/)&#xff09; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。…...

SpringCloud微服务:Eureka

目录 提供者与消费者 服务调用关系 eureka的作用 在Eureka架构中&#xff0c;微服务角色有两类 Eureka服务 提供者与消费者 服务提供者:一次业务中&#xff0c;被其它微服务调用的服务。(提供接口给其它微服务)服务消费者:一次业务中&#xff0c;调用其它微服务的服务。(调…...

19.删除链表的倒数第N个结点(LeetCode)

想法一 先用tail指针找尾&#xff0c;计算出节点个数&#xff0c;再根据倒数第N个指定删除 想法二 根据进阶的要求&#xff0c;只能遍历一遍链表&#xff0c;那刚刚想法一就做不到 首先&#xff0c;我们要在一遍内找到倒数第N个节点&#xff0c;所以我们设置slow和fast两个指…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单&#xff0c;但对于一位合格的程序猿而言&#xff0c;需要掌握将递归转化为非递归的能力&#xff0c;毕竟递归调用的时候会调用大量的栈帧&#xff0c;存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧&#xff0c;而非…...