JAVA高级知识点整理

article/2025/8/20 15:34:46

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • String字符串类
    • String
    • 可变字符串
      • StringBuilder
      • 可变字符串与String之间的转换
  • RunTime类
    • 概述
    • 特点
    • 使用
  • Data类
      • 方法
    • SimpleDateFormat类
      • 方法
  • 包装类
    • 特点
      • 字符串与原始类型之间的转换
  • 异常
    • 异常的产生
    • 异常的类型
    • 处理异常
      • try-catch-finally语句
      • throws关键字
      • throw和throws
    • 自定义异常
      • 使用
  • 集合
    • 特点
    • 集合的框架
      • Collection接口
        • List接口(有序可重复)
          • ArrayList实现类
            • 常用方法
            • 例子
          • LinkedList实现类
            • 特点
            • 常用方法
            • 例子
          • ArrayList和LinkedList的区别
        • Set接口(无序不重复)
          • TreeSet实现类
            • 常用方法
            • 例子
        • Map接口
            • 常用方法
          • HashMap实现类
    • 遍历集合中元素的方式


前言

本周学习了Java高级阶段,主要是学习java自带的各种类的用法,内容稍多,重点在于集合的使用方面。

String字符串类

String

String的创建赋值例如:String str = “希希”; 字符串用"内容"定义之后,值不可改变;而str = “西西” ;是重新创建一个String并把地址保存在str中

String str = "希希"; //创建String
str = "西西" ;		//一个String将地址保存给str

再例如:

String s7 = new String("春娇");	//常量池:"春娇",堆:new String()String s8 = s7 + "志明";		//常量池:"志明" 堆:new StringBuilder()//4个对象:常量池:”春娇"和"志明",堆:new String()和new StringBuilde

注意
使用字符串进行比较是否相同时,因为是比较内存地址,所以不要用==比较,要使用重写后的.equals进行比较。

可变字符串

StringBuilder

因为String创建之后,值不会改变,如果要频繁的改变字符串的值,就要用到StringBuilder

StringBuilder = strb = new StringBuilder();
strb.append("千玺"); //这样就可以直接修改字符串的值

StringBuilder更新赋值操作全程只会有一个StringBuilder,赋值只操作对象,不会创建新对象,效率很高。
注意
StringBuilder属于非线程安全,建议单线程使用
多线程建议使用StringBuffer

可变字符串与String之间的转换

String转换为可变字符串

String str="hello";
StringBuilder sb = new StringBuilder(str)

可变字符串转换为String

StringBuilder sb = new StringBuilder("你好");
String str = String.valueOf(sb)

RunTime类

概述

Runtime类的对象,表示程序运行时对象(程序运行环境对象)。
包含了程序运行环境相关的信息。常用于获取运行环境信息(如虚拟机内存)或执行某个命令。

特点

这个类不是一个抽象类,但不能创建对象,因为它的构造方法是私有的。
这个类提供了一个静态方法getRuntime(),通过这个方法,可以获取一个Runtime类的对象。
这是Java中的一种设计模式–单例模式(一个类只能有一个创建对象)。

使用

runtime.freeMemory()	//得到当前虚拟机的空闲内存
runtime.totalMemory()	//得到当前虚拟机最大内存
runtime.maxMemory()		//得到当前虚拟机所支持最大内存

注意

public static void fun(char[] list,Person p){
list[0]='m';//这里在直接操作实际参数,会影响实参
p = new Person();//这里创建了一个新的对象,操作的是方法中的对象,不会影响实参
p.setName("刘鑫");
}
public static void main(String[] args){
char[] list={'a','b','c'};
Person p = new Person();
fun(list,p);
System.out.println(list[0]);//方法内部直接操作数组,会影响实际参数,输出m
System.out.println(p.getName());//方法内部创建了新对象,不会影响实际参数,输出null
}

Data类

用于表示日期时间的类,位于java.util包下

方法

Date date = new Date();
System.out.println(date);

会打印这种格式的当前时间

常用方法

getTime()  		 	//得到对应Date对象表示的毫秒数
setTime(long l)	 	//设置Date对象的毫秒数
after(Date when) 	//判断调用日期对象是否在when之后
before(Date when) 	//判断调用日期对象是否在when之前

SimpleDateFormat类

方法

SimpleDateFormat(String pattern); //创建一个指定日期模板的格式化日期对象
日期模板
yyyy 年份
MM 月份
dd 日期
HH 小时
mm 分钟
ss 秒
E 星期
以上两个字母都可以写成一个,如月份5 M5,MM:05
yyyy/MM/dd HH:mm:ss E 2022/11/24 16:24:09 星期四

例如:

String patten = "yyyy/MM/dd HH:mm:ss E";//年/月/日 时:分:秒 星期
//创建格式化日期类对象,参数为日期模板
SimpleDateFormat sdf = new SimpleDateFormat(patten);
Date now = new Date();
//调用格式化日期对象的format(Date date),将Date对象转换为指定日期格式的字符串
String format = sdf.format(now);
//输出
System.out.println(format);
//parse(String str)将指定日期模板的字符串转换为Date对象
Date date = sdf.parse("2000/5/3 2:1:3 星期一");
System.out.println(date);

包装类

包装类就是原始类型对应的类类型。包装类通常用于字符串与原始类型之间的转换。
在web应用中,从浏览器页面中获取到后台的数据,全部都是String类型,所以一定要使用转换为原始
类型的方法。

包装类原始类型
Bytebyte
Shortshort
Integerint
Longlong
Floatfloat
Doubledouble
Characterchar
Booleanboolean

特点

  1. 八个原始类型中,除了int和char,其余类型的包装类,都是将首字母改为大写。int对应Integer,char对应Character
  2. 包装类都是被final修饰的,不能被继承
  3. 除了Character类,其余包装类都有两个构造方法:参数为原始类型或String的构造方法。
  4. Character的构造方法只有一个,参数为char类型。这些构造方法用于将原始类型或字符串转换为包装类对象
  5. 除了Character类,其余类都有静态方法parse原始类型(String str),用于将字符串转换为相应的原始类型
  6. 数值型的包装类的parseXXX()方法,如果参数不是对应的数字,转换时就会抛出
  7. NumberFormat异常。如"123abc",或"123.4",在使用Integer.parseInt()时都会抛出异常
  8. Boolean类型中的parseBoolean()方法,参数如果是"true"这四个字母,不区分大小写,都能转换为真正boolean类型的true,只要不是"true"这个单词,转换结果都为false
  9. 除了Boolean类,其余包装类都有MAX_VALUE和MIN_VALUE这两个静态属性,用于获取对应类型支持的最大最小值
  10. 所有包装类都重写了toString()方法,用于将包装类对象转换为String对象

字符串与原始类型之间的转换

使用原始类型对应的包装类,调用parse原始类型(字符串)方法

String num="123";
byte b = Byte.parseByte(num);//123
short s = Short.parseShort(num);//123
int i = Integer.parseInt(num);//123
long l = Long.parseLong(num);//123
float f = Float.parseFloat(num);//123.0
double d = Double.parseDouble(num);//123.0
boolean flag = Boolean.parseBoolean(num);//false

异常

当程序没有按开发人员的意愿正常执行,中途出现错误导致程序中断,出现这种情况,就称为异常。

异常的产生

异常在程序中以对象的形式存在。当代码执行过程中出现异常,虚拟机会自动创建一个异常对象,如果
没有对象该异常对象进行处理,就会导致程序中断,不再执行后续代码。

异常的类型

运行时异常

常见运行时异常出现的情景
NullPointerException用空对象null调用属性或方法
ArrayIndexOutOfBoundsException使用数组时,下标超出范围
NumberFormatException使用包装类调用parse方法做转换时,无法
InputMismatchException使用Scanner接收控制台输入时,如果不满足接收的类型。如int i = sc.nextInt(),实际输入a
ClassCastExceptionPerson p = (Person)Object obj;
ArithmeticException0当分母

编译时异常
如果一个异常类属于Exception异常类的子类,称为编译时异常,无法通过编译,必须处理异常后
才能编译运行。

常见编译时异常出现的情景
SQLException操作数据库时
IOException使用流对象时
FileNotFoundException方法的参数为文件时

处理异常

try-catch-finally语句

try{
//可能出现异常的代码
}catch(异常类 异常对象){
//如果出现异常对象,且与catch小括号中的异常类型匹配,就会执行这里的代码
}catch(异常类 异常对象){
//如果出现异常对象,且与catch小括号中的异常类型匹配,就会执行这里的代码
}finally{
//无论程序是否会抛出异常,都要执行的代码
}

注意
try、catch、finally都不能单独使用,try需要配合catch或finally或catch和finally一起使用
执行try中的内容时,当某行代码抛出异常,不再执行try中该行代码后续的内容
无论try中的代码是否会抛出异常,finally中的代码一定会执行
在try中定义的内容,无法在try之外的地方使用
try中如果有return,不影响finally的执行,finally优先于return执行

throws关键字

使用throws关键字直接将异常抛出,让程序通过编译

public void fun() throws InterruptException{//这时该方法就会有一个声明:该方法可能会抛出异常
//这句话直接写完后,会报错,因为sleep()方法可能会抛出InterruptException异常,属于编译时异常,必须要处理
Thread.sleep(500);
}

throw和throws

throws表示用于声明方法有可能出现的异常。使用时写在方法的小括号之后

public void fun() throws InterruptException{
Thread.sleep(500);
}

throw用于手动抛出异常对象。使用时,写在方法体中,常用于满足某种情况时,强制中断程序
用法:throw 异常对象;

public void fun2(){
for(int i=0;i<10;i++){
if(i==5){
//手动抛出异常
throw new NullPointerException();}}
}

自定义异常

如果需要在某种情况下中断程序, 可以自定义一个异常类,再通过throw关键字手动抛出。

使用

先创建一个异常类

public class MyException extends RuntimeException{public MyException(String message) {super(message);        //message代表异常触发时,输出什么样的提示}
}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int connt=0;while (true){System.out.print("请输入密码:");String pwd = scanner.nextLine();int yue = 0;if (connt==3){throw new moneyEx("密码错误三次,程序终止"); //在这里用throw关键字抛出异常}						//这里输入要提示的内容//验证密码if (!pwd.equals("123")) {System.out.println("请重新输入密码");connt++;}if (pwd.equals("123")){//菜单内容}

再写好触发条件与触发后提示内容

集合

特点

  1. 能保存一组数据,可以有序可以无序
  2. 集合的容量可变
  3. 集合中可以保存不同类型的数据
  4. 可以获取集合中保存的元素实际数量

集合的框架

集合的根接口为Collection接口和Map接口
在这里插入图片描述
在这里插入图片描述

Collection接口

该接口有两个核心子接口:List和Set。
这两个接口都可以保存一组元素,List接口保存元素时,是有序可重复的;Set接口保存元素时,是无序
不重复的。

List接口(有序可重复)

ArrayList实现类
常用方法

在这里插入图片描述

例子
 public static void main(String[] args) {//创建一个空集合,实际会创建一个Object类型的空数组ArrayList arrayList = new ArrayList();//添加元素到末尾arrayList.add(3);//这里的3不是int类型,而是Integer类型arrayList.add("hello");arrayList.add("hello");arrayList.add(null);arrayList.add(false);//添加元素到指定索引,效率低,因为会影响指定索引之后的元素arrayList.add(0, "first");//根据元素删除第一次出现的元素,效率低,因为会影响被删除元素之后的元素boolean flag = arrayList.remove("hello");//根据指定索引删除,返回被删除的元素Object remove = arrayList.remove(3);//得到指定索引的元素Object o = arrayList.get(0);System.out.println(o);//集合可以获取实际的元素数量int size = arrayList.size();System.out.println(size);//判断集合中是否存在某个元素System.out.println(arrayList.contains("first"));//替换集合中指定索引对应的元素,返回被替换的元素Object set = arrayList.set(0, "set");System.out.println(set);//清空集合// arrayList.clear();//判断集合是否为空System.out.println(arrayList.isEmpty());//得到某个元素第一次出现的索引System.out.println(arrayList.indexOf(false));//截取索引为[from,to)区间内的元素List list = arrayList.subList(1, 3);System.out.println(list);//将集合转换为数组System.out.println(arrayList.toArray()[2]);//如果直接输出集合对象,会调用重写后的toString()方法,输出集合中的所有元素System.out.println(arrayList);}
LinkedList实现类
特点
  1. 采用双向链表实现的集合
  2. 集合中保存的每个元素也称为节点,除首尾节点外,其余节点都保存了自己的信息外,还保存了其前一个和后一个节点的地址
  3. 如果在双向链表的数据结构中插入和删除操作节点时,不会影响其他节点的位置。如添加时新节点时,只需要重写定义新节点的前后节点位置即可
  4. 如果要查询某个节点时,需要从头结点或尾结点开始一步步得到目标节点的位置
  5. 双向链表在中间插入和删除的效率高,随机读取的效率低
    在这里插入图片描述
常用方法

在这里插入图片描述

例子
 public static void main(String[] args) {LinkedList<String> namelist = new LinkedList();namelist.add("梅西");namelist.add("c罗");namelist.add("凯恩");namelist.add("德布劳内");namelist.add("内马尔");int i = namelist.indexOf("c罗");namelist.add(i,"莱万");namelist.add(namelist.indexOf("莱恩")+1,"莫德里奇");namelist.addLast("姆巴佩");namelist.set(namelist.indexOf("凯恩"),"格列");namelist.remove("德布劳内");System.out.println(namelist);}
ArrayList和LinkedList的区别
  1. 这两个类都是List接口的实现类,保存的元素有序可重复,允许保存null
  2. ArrayList采用数组实现,随机读取效率高,插入删除效率低,适合用于查询
  3. LinkedList采用双向链表实现,插入删除时不影响其他元素,效率高,随机读取效率低,适合用于 频繁更新集合

Set接口(无序不重复)

无序集合,元素不可以重复,允许保存null,没有索引。
Set接口中没有自己定义的方法,都是继承于Collection接口中的方法

TreeSet实现类

特殊的Set实现类,数据可以有序保存,可以重复,不能添加null
采用红黑树实现的集合

常用方法

在这里插入图片描述

例子
public int compareTo(Object o) {
//此时this是当前添加的对象
//o是已存在的集合中的对象
Employee emp = (Employee) o;
//这里用当前员工号-已有员工号,根据员工号升序
return this.getNo()-emp.getNo();
//根据姓名字符串的排序方式排序
// return emp.getName().compareTo(this.getName());
}public static void main(String[] args) {
TreeSet<Employee> emps = new TreeSet<>();
Employee e1 = new Employee(10023,"aaa","市场部");
Employee e2 = new Employee(10025,"ccc","市场部");
Employee e3 = new Employee(10028,"bbb","市场部");
Employee e4 = new Employee(10028,"xxx","市场部");
//第一个元素直接添加
emps.add(e1);
//第二个元素添加时,调用compareTo()方法 e2.compareTo(e1) e2.10025 -
e1.10023 结果为正,添加在现有元素之后
emps.add(e2);
emps.add(e3);
//添加该元素时,调用compareTo()方法 e4.10028 - e3.10028 结果为0,不添加
emps.add(e4);
for (Employee emp : emps) {
System.out.println(emp);
}
}

使用重写后的方法 可以控制集合的降序与升序

Map接口

Map称为映射,数据以键值对的形式保存。保存的是键与值的对应关系。
键称为Key,值称为Value,键不能重复,键允许出现一个null作为键,值无限制。
键和值都是引用类型。
如,yyds就是一个键key,代表了一个含义:“永远单身”即为值value。

常用方法

在这里插入图片描述

HashMap实现类

例子

public static void main(String[] args) throws ParseException {HashMap hp = new HashMap();hp.put("lol","英雄联盟");//向集合中添加一组键值对hp.put("pubg","绝地求生");hp.put("cs","反恐精英");System.out.println(hp);System.out.println("get"+hp.get("lol"));//在集合中根据键得到对应的值System.out.println("size"+hp.size());//得到键值对的数量System.out.println("keySet"+hp.keySet());//获取键的集合System.out.println("values"+hp.values());//获取值的集合System.out.println("containsKey"+hp.containsKey("cs"));//判断是否存在某个键System.out.println("containsValue"+hp.containsValue("英雄联盟"));//判断是否存在某个值System.out.println("entrySet"+hp.entrySet());//得到键值对的集合}

在这里插入图片描述

注意
HashMap中,用put方法存放两个键相同值不同的键值对时,编译不会报错,后添加的会自动替换添加好的键值对
添加键时可以为null,但只能存在一个

遍历集合中元素的方式

 public static void main(String[] args) {List<String> namelist = new ArrayList();namelist.add("梨花");namelist.add("云春");namelist.add("冷湖");namelist.add("林夕");System.out.println("for循环");for (int i = 0; i < namelist.size(); i++) {String name = namelist.get(i);System.out.println(name);}System.out.println("增强for循环");for (String s : namelist) {System.out.println(s);}System.out.println("迭代器循环");Iterator<String> iterator = namelist.iterator();while (iterator.hasNext()){String name = iterator.next();System.out.println(name);}namelist.forEach(System.out::println);}

http://chatgpt.dhexx.cn/article/jd4Csc0u.shtml

相关文章

java高级(javaAdv)

一、String字符串 String 是一个类&#xff0c;属于引用类型。 Java 程序中一切使用 "" 引起来的内容&#xff0c;都是这个类的实例&#xff0c;称为字符串对象。 字符串定义后是一个常量 &#xff0c;值不可更改。字符串 实际是一个字符数组 。 二、 String 类使…

各种编程语言名称的来历

写了那么多代码&#xff0c;你知道你用的编程语言为什么叫那个名字么&#xff1f; 下面整理了 TIOBE 2017年3月份前十语言的名称由来(本月Swift首次进入TIOBE指数前10名!) Java 任职于太阳微系统&#xff08;SUN&#xff09;的詹姆斯高斯林等人于1990年代初开发Java语言的雏形…

马上七夕到了,用各种编程语言实现10种浪漫表白方式

目录 1. 直接表白&#xff1a;2. 七夕节表白&#xff1a;3. 猜心游戏&#xff1a;4. 浪漫诗句&#xff1a;5. 爱的方程式&#xff1a;6. 爱心Python&#xff1a;7. 心形图案JavaScript 代码&#xff1a;8. 心形并显示表白信息HTML 页面&#xff1a;9. Java七夕快乐&#xff1a;…

各种编程语言的演变

关注、星标公众号&#xff0c;不错过精彩内容 素材来源&#xff1a;21ic电子网 编辑整理&#xff1a;strongerHuang 学编程的过程中&#xff0c;总是有小伙伴纠结我到底是该学C语言呢&#xff1f;还是Python呢&#xff1f;或者学Java&#xff1f; 那到底为什么编程需要这么多编…

plc编程语言是c语言吗,PLC各种编程语言特点你了解多少?

原标题&#xff1a;PLC各种编程语言特点你了解多少&#xff1f; 编程语言种类很多&#xff0c;各有各的优势&#xff0c;语句表和指令表类似&#xff0c;是编程语言的一种&#xff0c;在PLC中应用比较普遍&#xff0c;也是一种高级编程语言&#xff0c;PLC中语句表、梯形图、SC…

各种编程语言分类

计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序. 翻译的方式有两种&#xff1a;一个是编译&#xff0c;一个是解释。 编译型语言写的程序执行之前&#xff0c;需要一个专门的编译过程&#xff0c;把程…

各种编程语言的应用C/C++/Python/Java/JavaScript

各种编程语言的应用 &#xff08;1&#xff09;C语言 C语言是面向过程的&#xff0c;数据与算法分开。它的重点在于算法和数据结构。 优点&#xff1a;结构化编程语言&#xff0c;层次清晰&#xff0c;可以嵌入编程&#xff0c;可以跟硬件打交道&#xff0c;作底层开发。 缺点&…

html网页制作特效代码,超全html网页制作特效代码.doc

超全html网页制作特效代码 HTML特效代码1。忽视右键 或 2。加入背景音乐 IE: NS: *.mid你的背景音乐的midi格式文件 3。简单的window.open方法 οnclick"javascript :window.open(文件路径/文件名,newwindow, toolbarno,scrollbarsyes,resizableno,top0,left0, width400,h…

抖音爱心特效代码

这是效果 这代码文件的百度网盘链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1uZmPcoesCifI5GqsT8NeOQ 提取码&#xff1a;1234 第一步新建文本文件&#xff0c;命名为loveme&#xff0c;随便写 打开文本文件把最下面代码复制到txt文件里面&#xff0c;把第4行和…

爱心特效代码

创建一个空文件夹 随意个地方创建空文件夹都会吧 在新创建的文件夹里创建个记事本 右键创建文本文档都会吧 代码全部复制到新建的文本文档里 切记保存 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE…

HTML3D立体城市特效代码

HTML3D立体城市特效代码 鼠标可以控制“行走”方向&#xff0c;立体性很强 index.html代码如下 <!doctype html> <html> <head> <meta charset"utf-8"> <title>3D城市</title><style> html {overflow: hidden;touch-act…

HTML-特效代码大全

HTML特效代码大全&#xff08;一部分## 标题&#xff09; HTML特效代码 1。忽视右键   <body οncοntextmenu“return false”>   或   2。加入背景音乐   IE:   NS:     .mid你的背景音乐的midi格式文件 3。简单的window.open方法   <a href"#"…

html语言闪烁特效代码,css3 文字闪烁特效代码

今天给大家分享几个文字闪烁特效代码,纯css3代码实现,对于新手小伙伴值得拿来学习一下。 文字闪烁特效一 通过改变透明度来实现文字的渐变闪烁,代码如下: 文字闪烁:闪烁效果 .main{color: #666;margin-top: 50px; } /* 定义keyframe动画,命名为blink */ @keyframes blink…

html canvas 烟花 特效代码

代码如下&#xff1a; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><title> 真实烟花</title><style>body {padding: 0;}canvas {display: block;}</style> </head><body>…

html星空代码在线,怎么操作html星空特效代码

html不是一种编程语言&#xff0c;而是一种标记语言 &#xff0c;是网页制作所必备的。这些代码式的专业语言我们在普通的工作中运用的非常少&#xff0c;它的通用性可以把存放在一台电脑中的文本或图形与存放在另一台电脑中的文本或图形方便地联系在一起&#xff0c;形成有机的…

HTML龙卷风特效代码

今天&#xff0c;我给大家带来了短视频平台上超火的HTML龙卷风特效代码&#xff0c;如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>粒子漩涡特效</title> <style> html,body{ margin:0px…

html爱心特效代码教程

一、图片展示 二、使用教程 1.桌面新建文本文档 2.将以下代码放入 3.将后缀改为.html 三、代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME&…

html爱心特效代码

New Document /* * RequestAnimationFrame polyfill by Erik Mller */ (function(){var b0;var c[“ms”,“moz”,“webkit”,“o”];for(var a0;a<c.length&&!window.requestAnimationFrame;a){window.requestAnimationFramewindow[c[a]“RequestAnimationFrame”…

html简单特效代码,html特效代码大全

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 23. 永远都会带着框架 if (window top)top.location.href "frames.htm"; //frames.htm为框架网页 // --> 24. 防止被人frame if (top.location ! self.location)top.locationself.location; // --> 25. 网页将不…

Android 科大讯飞 语音听写

这几天在搞一个语音识别的项目 用到i的是科大讯飞的语音服务&#xff0c;第一次搞语音识别&#xff0c;在这里记录一下&#xff0c;也希望对大家有用。废话不多说进入正题 一、要用到科大讯飞的语音识别功能&#xff0c;肯定是要他的开发者平台申请账号&#xff0c;创建应用&a…