探索Java面向对象编程的奇妙世界(七)

news2024/11/15 23:48:01

    • ⭐ 字符串 String 类详解
    • ⭐ 阅读 API 文档
    • ⭐ String 类常用的方法
    • ⭐ 字符串相等的判断
    • ⭐ 内部类

⭐ 字符串 String 类详解

String 是最常用的类,要掌握 String 类常见的方法,它底层实现也需要掌握好,不然在工作开发中很容易犯错。
在这里插入图片描述

🐟	String 类又称作不可变字符序列。
🐟	String 位于 java.lang 包中,Java 程序默认导入 java.lang 包下的所有类。
🐟	Java 字符串就是 Unicode 字符序列,例如字符串“Java”就是 4 个 Unicode 字符’J’、’a’、’v’、’a’组成的。
🐟	Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是 String 类的一个实例。

【eg】String 类的简单使用

String e = "" ; // 空字符串
String greeting = " Hello World ";

【eg】"+"连接符

int age = 18;
String str = "age is" + age; //str 赋值为"age is 18"
//这种特性通常被用在输出语句中:
System.out.println("age is" + age);

String 类和常量池
在这里插入图片描述

Java 内存分析中,我们会经常听到关于“常量池”的描述,实际上常量池也分了以下三种:全局字符串常量池、class 文件常量池、运行时常量池(Runtime Constant Pool)。
我们只关注运行时常量池即可。

【eg】字符串相等判断(以后一般判断字符串值是否相等,使用 equals())

String g1 = "北京";
String g2 = "北京";
String g3 = new String("北京");
System.out.println(g1 == g2); // true
System.out.println(g1 == g3); // false
System.out.println(g1.equals(g3)); //true

⭐ 阅读 API 文档

🐟 如何下载 API 文档

下载地址,点击进入:
https://www.oracle.com/java/technologies/javase-jdk8-doc-downloads.html

🐟 查看 API 文档

下载成功后,解压下载的压缩文件,点击进入 docs/api 下的 index.html 文件即可。

🐟 API 文档如何阅读
在这里插入图片描述

⭐ String 类常用的方法

String 类是我们最常使用的类。以下是常用的方法。

方法解释说明
char charAt(int index)返回字符串中第 index 个字符
boolean equals(String other)如果字符串与 other 相等,返回 true;否则,返回 false。
boolean equalsIgnoreCase(String other)如果字符串与 other 相等(忽略大小写),则返回 true;否则,返回 false。
int indexOf(String str)返回从头开始查找第一个子字符串 str 在字符串中的索引位置。如果未找到子字符串 str,则返回-1。
lastIndexOf()返回从末尾开始查找第一个子字符串 str 在字符串中的索引位置。如果未找到子字符串 str,则返回-1。
int length()返回字符串的长度。
String replace(char oldChar,char newChar)返回一个新串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。
boolean startsWith(String prefix)如果字符串以 prefix 开始,则返回 true。
boolean endsWith(String prefix)如果字符串以 prefix 结尾,则返回 true。
String substring(int beginIndex)返回一个新字符串,该串包含从原始字符串 beginIndex 到串尾。
String substring(int beginIndex,int endIndex)返回一个新字符串,该串包含从原始字符串 beginIndex 到串尾或 endIndex-1 的所有字符。
String toLowerCase()返回一个新字符串,该串将原始字符串中的所有大写字母改成小写字母。
String toUpperCase()返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母。
String trim()返回一个新字符串,该串删除了原始字符串头部和尾部的空格。

【eg】String 类常用方法一

	public class StringTest1 {
		public static void main(String[ ] args) {
			String s1 = "core Java";
			String s2 = "Core Java";
		System.out.println(s1.charAt(3));//提取下标为 3 的字符
		System.out.println(s2.length());//字符串的长度
		System.out.println(s1.equals(s2));//比较两个字符串是否相等
		System.out.println(s1.equalsIgnoreCase(s2));//比较两个字符串(忽略大小写)
		System.out.println(s1.indexOf("Java"));//字符串 s1 中是否包含 Java
		System.out.println(s1.indexOf("apple"));//字符串 s1 中是否包含 apple
		String s = s1.replace(' ', '&');//将 s1 中的空格替换成&
		System.out.println("result is :" + s);
	}
}

执行结果如下所示:
在这里插入图片描述

【eg】String 类常用方法二

	public class StringTest2 {
		public static void main(String[ ] args) {
			String s = "";
			String s1 = "How are you?";
		System.out.println(s1.startsWith("How"));//是否以 How 开头
		System.out.println(s1.endsWith("you"));//是否以 you 结尾
			s = s1.substring(4);//提取子字符串:从下标为 4 的开始到字符串结尾为止
		System.out.println(s);
			s = s1.substring(4, 7);//提取子字符串:下标[4, 7) 不包括 7
		System.out.println(s);
			s = s1.toLowerCase();//转小写
		System.out.println(s);
			s = s1.toUpperCase();//转大写
		System.out.println(s);
			String s2 = " How old are you!! ";
			s = s2.trim();//去除字符串首尾的空格。注意:中间的空格不能去除
		System.out.println(s);
		System.out.println(s2);//因为 String 是不可变字符串,所以 s2 不变
}
}

执行结果如下所示:
在这里插入图片描述

⭐ 字符串相等的判断

🐟	equals 方法用来检测两个字符串内容是否相等。如果字符串 s 和 t 内容相等,则s.equals(t)返回 true,否则返回 false。
🐟	要测试两个字符串除了大小写区别外是否是相等的,需要使用 equalsIgnoreCase方法。
🐟	判断字符串是否相等不要使用"=="。

【eg】忽略大小写的字符串比较

"Hello".equalsIgnoreCase("hellO");//true

【eg】字符串的比较:"= ="与 equals()方法

	public static void main(String[ ] args) {
		String g1 = "北京";
		String g2 = "北京";
		String g3 = new String("北京");
	System.out.println(g1 == g2); // true 指向同样的字符串常量对象
	System.out.println(g1 == g3); // false g3 是新创建的对象
	System.out.println(g1.equals(g3)); // true g1 和 g3 里面的字符串内容是一样的
	}
}

执行结果如下所示:
在这里插入图片描述

⭐ 内部类

我们把一个类放在另一个类的内部定义,称为内部类(inner class)。
在这里插入图片描述

内部类的两个要点:

⭐	内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。
⭐	内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类不能访问内部类的内部属性。

注意

内部类只是一个编译时概念,一旦我们编译成功,就会成为完全不同的两个类。对于一个名为 Outer 的外部类和其内部定义的名为 Inner 的内部类。编译完成后会出现 Outer.class和 Outer$Inner.class 两个类的字节码文件。所以内部类是相对独立的一种存在,其成员变量/方法名可以和外部类的相同。

【eg】内部类的定义和使用

/**外部类 Outer*/
		class Outer {
		private int age = 10;
		public void show(){
		System.out.println(age);//10
	}
/**内部类 Inner*/
		public class Inner {
		//内部类中可以声明与外部类同名的属性与方法
		private int age = 20;
		public void show(){
		System.out.println(age);//20
		}
	}
}

编译后会产生两个不同的字节码文件,如图所示:
在这里插入图片描述

内部类的分类
在这里插入图片描述

非静态内部类

非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)
🐟 非静态内部类对象必须寄存在一个外部类对象里。因此,如果有一个非静态内部类对象那么一定存在对应的外部类对象。非静态内部类对象单独属于外部类的某个对象。
🐟 非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类
成员。
🐟 非静态内部类不能有静态方法、静态属性和静态初始化块。

🐟 成员变量访问要点:

⭐	内部类属性:this.变量名。
⭐	外部类属性:外部类名.this.变量名。

【eg】内部类中访问成员变量

/**外部类 Outer1*/
	class Outer1 {
	private int age = 10;
 	public void show(){
 	System.out.println(age);//10
 }
 /**内部类 Inner*/
 	public class Inner1 {
 //内部类中可以声明与外部类同名的属性与方法
 	private int age = 20;
 	public void show(){
 System.out.println(age);//20
 System.out.println(Outer1.this.age); //10 访问外部类的普通属性
	 }
 }
}

静态内部类

定义方式:

	static class ClassName {
	//类体
}

使用要点:

⭐ 静态内部类可以访问外部类的静态成员,不能访问外部类的普通成员。
⭐ 静态内部类看做外部类的一个静态成员。

【eg】静态内部类的访问

/*
测试静态内部类
*/
	class Outer2{
 	private int a = 10;
 	private static int b = 20;
 //相当于外部类的一个静态成员
 	static class Inner2{
 	public void test(){
// System.out.println(a); //静态内部类不能访问外部类的普通属性
 	System.out.println(b); //静态内部类可以访问外部类的静态属性
 	}
 }
}
	public class TestStaticInnerClass {
 	public static void main(String[ ] args) {
 //通过 new 外部类名.内部类名() 来创建内部类对象
 	Outer2.Inner2 inner =new Outer2.Inner2();
 	inner.test();
 	}
}

匿名内部类

适合那种只需要使用一次的类。比如:键盘监听操作等等。在安卓开发、awt、swing开发中常见。

语法:

	new 父类构造器(实参类表) \实现接口 () {
 		//匿名内部类类体!
}

【eg】匿名内部类的使用

/**
 * 测试匿名内部类
 */
	public class TestAnonymousInnerClass {
	 public void test1(A a) {
 		a.run();
 }
 	public static void main(String[] args) {
 	TestAnonymousInnerClass tac = new 
	TestAnonymousInnerClass();
 	tac.test1(new A() {
 @Override
 	public void run() {
 	System.out.println("匿名内部类测试! 我是新定义的第一个匿名内部类!");
 	}
 });
 	tac.test1(new A() {
 @Override
 	public void run() {
 	System.out.println("我是新定义的第二个匿名内部类");
 	}
 });
 }
}
	interface A {
 	void run();
}

注意

⭐	匿名内部类没有访问修饰符。
⭐	匿名内部类没有构造方法。因为它连名字都没有那又何来构造方法呢。

局部内部类

定义在方法内部的,作用域只限于本方法,称为局部内部类。
局部内部类在实际开发中应用很少。

【eg】方法中的内部类

/**
 * 测试局部内部类
 */
	public class TestLocalInnerClass {
		public void show() {
 		//作用域仅限于该方法
 		class Inner3 {
 		public void fun() {
 	System.out.println("helloworld");
 	}
 }
 		new Inner3().fun();
 }
 		public static void main(String[ ] args) {
 		new TestLocalInnerClass().show();
 }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/594126.html

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

相关文章

UI设计师必备的远程软件有哪些?

远程工作时,选择高效的远程软件非常重要。以下是3款提高工作效率的远程软件,希望对你有所帮助! 1、即时设计协同设计 是国内首款集合原型、设计、交付、协作和资源管理于一体的高效远程设计软件。它提供实时在线协作功能,使用户…

14肖特基二极管

目录 一、介绍 二、结构 三、关键参数 1、导通压降VF 2、反向饱和漏电流IR 3、额定电流Io/IF 4、最大浪涌电流IFSM 5、最大反向峰值电压VRM 6、最大直流反向电压VR 7、最高工作频率fM 8、反向恢复时间Trr 9、最大耗散功率P 四、特点 1、反向恢复时间 2、缺点 五…

vue router 拆分路由 自动导入

目录 目录结构:拆分路由:自动导入:配置路由: 不求甚解,直接照搬就行了。 目录结构: 拆分路由: // danweiRouter.js export default {path: /danwei,name: danwei,component: () > import(.…

详解RGB和YUV色彩空间转换

前言 首先指出本文中的RGB指的是非线性RGB,意思就是经过了伽马校正,按照行业规矩应当写成RGB,但是为了书写方便,仍写成RGB。关于YUV有多种叫法,分别是YUV,YPbPr,YCbCr。因此本文将首先指出他们之…

这 13 种职业用AI提效的 40 类场景盘点

随着人工智能技术的发展,职业领域出现了诸如我们“小蜜蜂助手Beezy”等神奇的工具,大幅度提升了各行各业里从业人员的工作效率。 笔者今天将详述13种常见职业,分别是如何利用这些工具在实际工作过程中来帮助自己提升效率的。大量干货和私藏宝…

2419286-92-1,Sulfo-Cy5.5 NHS ester,磺酸基Cyanine5.5-活性酯,用于标记抗体

Sulfo-Cyanine5.5 NHS ester,sulfo Cy5.5(Et) NHS,sulfo Cy5.5 SE,磺酸基Cy5.5-活性酯 (文章资料汇总来源于:陕西新研博美生物科技有限公司小编MISSwu)​ 产品结构式: 产品规格: 1…

Maven高级2-聚合与继承

1. 聚合 注意打包方式&#xff0c;不是默认的jar包形式&#xff0c;也不是web的war包形式&#xff0c;而是pom形式&#xff1b; <groupId>org.example</groupId> <artifactId>springmvc_08_parent</artifactId> <version>1.0-SNAPSHOT</versi…

探索 Web 管理之路,OpenYurt 社区 UI/CLI SIG 正式启动

作者&#xff1a;陈璐、邓梁 背景 OpenYurt 是业界首个依托云原生技术体系、“零”侵入实现的智能边缘计算平台。它具有“云、边、端一体化”的全方位能力,可以帮助用户快速实现大规模边缘计算业务和异构算力的高效交付、运维及管理。 在前几个迭代的大版本中&#xff0c;Op…

探访世优科技数字人虚拟直播产品体系 | 世优开放日再次成功举行

2023年5月30日&#xff0c;世优科技全栈技术产品体验活动&#xff08;第二期&#xff09;顺利落下帷幕。此次活动共邀请到30余位各行各业的嘉宾到场&#xff0c;在两个多小时的开放日活动中&#xff0c;世优科技全面展示数字人及虚拟直播领域的技术产品体系。来访嘉宾们全程体验…

大数据:HDFS的Shell操作,进程启动管理,文件系统操作命令,创建文件文件夹,下载上传,复制移动,删除,展示,追加内容

大数据&#xff1a;HDFS的Shell操作&#xff0c;进程启动管理&#xff0c;文件系统操作命令&#xff0c;创建文件文件夹&#xff0c;下载上传&#xff0c;复制移动&#xff0c;删除&#xff0c;展示 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c…

vue-admin-templae源码分析

1.源码结构: build下index.js为工程发布dist工具 mock为接口数据模拟服务器 node_modules为npm install 安装的nodejs依赖模块 public为静态资源 src不工程源码目录 tests为单元测试目录 开发与生产环境文件 vue.config.js为工程配置文件 登陆页面,登陆按钮点击事件调用完整流…

【P45】JMeter 开关控制器(Switch Controller)

文章目录 一、开关控制器&#xff08;Switch Controller&#xff09;参数说明二、测试计划设计2.1、下标值2.2、变量 一、开关控制器&#xff08;Switch Controller&#xff09;参数说明 Switch 控制器的作用类似于 Interleave 控制器&#xff0c;因为它在每次迭代时运行其中一…

php内置类小结

文章目录 php内置类小结Error、Exception进行xss、绕过hash比较Error类Exception类使用Error、Exception内置类绕过md5、sha1等哈希比较Error类详解Exception类详解例题&#xff1a;[2020 极客大挑战]Greatphp 使用DirectaryIterator、Filesystemlterator、Globlterator内置类读…

ADManager Plus:简化员工管理,助力组织高效运营

在现代组织中&#xff0c;高效的员工管理是成功的关键之一。然而&#xff0c;随着员工数量的增加和组织结构的复杂化&#xff0c;手动处理员工管理任务变得繁琐而耗时。在这种情况下&#xff0c;ADManager Plus作为一款出色的员工管理解决方案&#xff0c;通过其卓越的功能和自…

那些在学习GPT的过程中学到的

1、大模型是什么 GPT横空出世之后&#xff0c;大模型火了&#xff0c;什么是大模型呐&#xff1f; 大模型通常指的是具有大规模参数和复杂结构的深度学习模型。它们的设计和结构可以因任务而异&#xff0c;但以下是一些常见的大模型结构&#xff1a; Transformer&#xff1a…

交换求和顺序的条件

交换求和顺序 文章目录 交换求和顺序应用场景可以交换求和的条件&#xff08;部分内容来源ChatGPT&#xff09;不能交换的情况其他可以参考的资料 应用场景 在多重求和中&#xff0c;交换求和顺序的最常见情况是需要改变计算某个表达式&#xff08;通常是连乘或连加&#xff0…

【软件】无联网情况下安装Win11 / 华为电脑更换Win11系统后触摸屏、声卡失效物理解决方案

一、提前备份好电脑驱动&#xff08;华为电脑更换Win11系统后触摸屏、声卡失效物理解决方案&#xff09; 1.电脑驱动备份方法&#xff1a; 1&#xff09;通过管理员身份打开命令提示符。 2&#xff09;输入命令&#xff1a;dism /online /export-driver /destination:"D…

极氪汽车 APP 系统云原生架构转型实践

作者&#xff1a;极氪汽车 前言 新能源汽车已经成为我国汽车市场再次崛起的关键支柱&#xff0c;随着新能源汽车市场的快速发展&#xff0c;不同类型的品牌造车厂商呈现出百花齐放的态势。极氪汽车是吉利控股集团旗下高端纯电汽车新品牌&#xff0c;2021 年 4 月极氪发布首款…

踩坑笔记 ---- 使用LocalDateTime开通会员到期时间与自动续费业务某天用户突然为0

写在前面 使用LocalDateTime的同学需要注意下&#xff0c;这东西的plusMonth可能会有点点超出你的认知&#xff0c;如果不慎掉坑里&#xff0c;希望这篇笔记可以给你提供思路 业务背景 此业务场景非常简单&#xff0c;自动续费业务&#xff0c;需要在用户会员到期前24小时执…

Linux 防火墙开启端口

文章目录 查看防火墙状态开启指定端口重启防火墙重新加载防火墙查看已开启的端口关闭指定端口临时关闭防火墙永久关闭防火墙&#xff08;必须先临时关闭防火墙&#xff0c;再执行该命令&#xff0c;进行永久关闭&#xff09;结语 以下是一些常用的 firewalld 命令&#xff1a; …