Java12基础(Package包 作用域 String字符串)

目录

一. Package包

import关键字

命名规范

 二. 作用域

三. String字符串(进阶)

创建方式:

内存情况:

1. 字符串的搜索

2. trim()方法

3. 替换字符串

4. 分割字符串

5. 拼接字符串

6. 格式化字符串

7. 类型转换 

8. 转换为char[ ]字符数组 

9. 字符编码

10. String不可变性

小结


一. Package包

在Java中,我们使用package来解决名字冲突。Java定义了一种使用名字来命名空间的方式,称之为包:package。一个类总是属于某个包,类名(比如Person)只是一个简写,真正的完整类名是 包名.类名。

hong包:

package zkt.knowledge01.hong;public class Person {public void study() {System.out.println("这是小红的Person类的study方法");}
}

ming包:

package zkt.knowledge01.ming;public class Person {public void eat() {System.out.println("这是小明的Person类的eat方法");}
}

●创建对象方式1:导包的方式,简单

//import zkt.knowledge01.hong.Person;//导入此包下的Person类
import zkt.knowledge01.hong.*;//导入此包下的所有类
	//创建对象方式1:导包的方式,简单//1.导包//2.创建对象Person p1 = new Person();p1.study();

●创建对象方式2: 完整类名的方式

//创建对象方式2: 完整类名的方式zkt.knowledge01.ming.Person p2 = new zkt.knowledge01.ming.Person();p2.eat();

   

在Java虚拟机执行的时候,JVM只看完整类名,因此,只要包名不同,类就不同。包可以是多层结构,用.隔开。例如:java.util。没有定义包名的class,它使用的是默认包(default package),非常容易引起名字冲突,因此,不推荐使用默认包(default package)

特别注意:包没有父子关系。java.util和java.util.zip是不同的包,两者没有任何继承关系。


import关键字

●import static的语法,它可以导入一个类的静态字段和静态方法:

import static java.lang.Math.*;
import static java.util.Arrays.*;
package zkt.knowledge01.包;import static java.lang.Math.*;
import static java.util.Arrays.*;
import  java.util.Arrays;
import static java.lang.System.*;public class Demo02 {public static void main(String[] args) {double d = random();System.out.println(d);System.out.println(PI);int[] a= {2,3,5,1};sort(a);out.println(Arrays.toString(a));}
}

Java编译器最终编译出的.class文件只使用完整类名,因此,在代码中,当编译器遇到一个class名称时:
●如果是完整类名,就直接根据完整类名查找这个class;
●如果是简单类名,按下面的顺序依次查找:

○查找当前package是否存在这个class;
○查找import的包是否包含这个class;
○查找java.lang包是否包含这个class。

如果按照上面的规则还无法确定类名,则编译报错。例如:

// Main.java
package test;import java.text.Format;public class Main {public static void main(String[] args) {java.util.List list; // ok,使用完整类名 -> java.util.ListFormat format = null; // ok,使用import的类 -> java.text.FormatString s = "hi"; // ok,使用java.lang包的String -> java.lang.StringSystem.out.println(s); // ok,使用java.lang包的System -> java.lang.SystemMessageFormat mf = null; // 编译错误:无法找到MessageFormat: MessageFormat cannot be resolved to a type}
}

因此,编写class的时候,编译器会自动帮我们执行两个import动作:
●默认自动import当前package的其他class;
●默认自动import java.lang.*


●注意:自动导入的是java.lang包,但类似java.lang.reflect这些包仍需要手动导入。
●如果有两个class名称相同,例如,mr.jun.Arrays和java.util.Arrays,那么只能import其中一个,另一个必须写完整类名。

命名规范

1.为了避免名字冲突,我们需要确定唯一的包名。推荐的做法是使用倒置的域名来确保唯一性。例如:
●org.apache
●org.apache.commons.log
●com.apesource
2.不要使用java的包名。例如:
●java.lang
●java.util
3.包名由小写字母组成。

 二. 作用域

●public (公共访问修饰符): 对所有类都可以进行访问。使用位置:类、接口、变量、方法

●protected(保护访问修饰符) : 对同包下的类、或子类(子类可以不同包)可访问。使用位置:变量、方法。

●friendly(默认访问修饰符): 在同一包内可访问,不使用任何修饰符。使用位置:类、接口、变量、方法。
●private(私有访问修饰符) : 当前类访问。使用位置:变量、方法。

修饰符

当前类

同包子类和不同类

不同包下子类

不同包不同类

public

Yes

Yes

Yes

Yes

protected

Yes

Yes

Yes

No

默认修饰符

Yes

Yes

No

No

private

Yes

No

No

No

三. String字符串(进阶)

基础见Java03基础

在Java中,String是一个引用类型,它本身也是一个class类。

创建方式:

		String s1 = "还是想考研";//String使用频率非常的高,编译器提供了一种针对于String独有的创建方式
//		类名 对象名 = new 类名(参数);String s2 = new String();//无参构造String s3 = new String(new char[] { '还', '想', '考', '研', '3' });String s4 = new String("还是想继续考研");String s5 = new String(new byte[] { 65, 66, 67 });

内存情况:

●存在在常量池中 共享同一片空间

		String a = "还是想考研";

●new就会开辟新的空间 存在堆内

		String s1 = new String("还是想考研");
//存在在常量池中 共享同一片空间String a = "还是想考研";String b = "还是想考研";System.out.println(a == b);//trueSystem.out.println(a.equals(b));//true//		new就会开辟新的空间 存在堆内String s1 = new String("还是想考研");String s2 = new String("还是想考研");System.out.println("s1==s2" + (s1 == s2));//s1==s2falseSystem.out.println(s1.equals(s2));//true

1. 字符串的搜索

startsWith()和endsWith()方法是用于判断字符串是否以指定字符串开头或结尾,返回值为boolean类型.

String str = "还是想考研";boolean b1 = str.startsWith("还是");System.out.println(b1);//trueboolean b2 = str.startsWith("想考研1");System.out.println(b2);//false

2. trim()方法

使用可以移除字符串首尾空白字符。空白字符包括空格,\t,\r,\n

//		trim()方法可以移除字符串首尾空白字符。空白字符包括空格,\t,\r,\n 中间空格不去String str = "  还是想  考研\n";System.out.println("去空格前:"+str);
//		注意:trim()并没有改变字符串的内容,而是返回了一个新字符串。//故需要重新赋值str= str.trim();System.out.println("去空格后:"+str);

[注]:trim()并没有改变字符串的内容,而是返回了一个新字符串。故需要重新赋值

3. 替换字符串

第一种:根据字符或字符串替换。

str.replace(旧,新)第一种:根据字符或字符串替换。

		// str.replace(旧,新)第一种:根据字符或字符串替换。String str = "hello";
//		str =str.replace("l", "w");
//		System.out.println(str);//hewwostr =str.replace("ll", "w");System.out.println(str);//hewoString str1 = "139-8899-7788";str1 =str1.replace("-", "");System.out.println(str1);//13988997788

第二种:是通过正则表达式替换。

str2.replaceAl1(正则表达式,替换后的内容)

//	是通过正则表达式替换。
//		str2.replaceAl1(正则表达式,替换后的内容)String str2 = "A,,B;C ,D";str2=str2.replaceAll("[\\,\\;\\s]+", ","); // "A,B,C,D"System.out.println(str2);//A,B,C,D

4. 分割字符串

要分割字符串,使用split()方法

split("分隔符")
split("表达式")

按照普通字符内容切割:

//split("分隔符")String str1 = "A#B#C#D";String[] strs = str1.split("#"); // 按照普通字符内容切割System.out.println(Arrays.toString(strs));//[A, B, C, D]

按照正则表达式切割字符串:

//split("表达式")String str2 = "北京0上海1大连2连云港3南京4杭州5深圳6齐齐哈尔7乌鲁木齐";String[] strs2 = str2.split("[0-9]"); // 按照正则表达式切割字符串System.out.println(Arrays.toString(strs2));//[北京, 上海, 大连, 连云港, 南京, 杭州, 深圳, 齐齐哈尔, 乌鲁木齐]

5. 拼接字符串

拼接字符串使用静态方法join(),它用指定的字符串连接字符串数组:

//类名.方法名()     用指定的字符串连接字符串数组String str3 = String.join("**", strs2);System.out.println(str3);//北京**上海**大连**连云港**南京**杭州**深圳**齐齐哈尔**乌鲁木齐String str4 = String.join("-", "还想","继续","考研");System.out.println(str4);//还想-继续-考研

使用"+":

//字符串的拼接String s1 ="hello";String s2 ="world";System.out.println(s1+s2);//helloworldSystem.out.println(s1.concat(s2));//helloworld

6. 格式化字符串

字符串提供了format()静态方法,可以传入其他参数,替换占位符,然后生成新的字符串。

//		%s---字符串
//		%d---显示整数,传入数据类型整数
//		%f---显示浮点数,传入浮点数String s = "hi %s, your score is %d,your money is %f";System.out.println(s);//hi %s, your score is %d,your money is %f// s.format不推荐使用对象名.方法名调用
//		s = s.format(s, "zkt1", 99, 77.77);//推荐使用类名.方法名进行调用s = String.format(s, "zkt", 99, 77.77);System.out.println(s);//hi zkt, your score is 99,your money is 77.770000

有几个占位符,后面就传入几个参数。参数类型要和占位符一致。我们经常用这个方法来格式化信息。常用的占位符有:
●%s:显示字符串
●%d:显示整数
●%f:显示浮点数
占位符还可以带格式,例如%.2f表示显示两位小数。如果你不确定用啥占位符,那就始终用%s,因为%s可以显示任何数据类型。

7. 类型转换 

要把任意基本类型或引用类型转换为字符串,可以使用静态方法valueOf()。

基本数据类型:

基本数据类型+""

	int i = 47;String s1 = "" + i;//基本数据类型+""System.out.println(s1);//47

valueOf()

int i = 47;String s2 = String.valueOf(i);System.out.println(s2);//47

引用数据类型:

//引用数据类型LocalDateTime localDateTime = LocalDateTime.now();String s3 = localDateTime.toString();//使用toString方法进行转换System.out.println(s3);//2024-05-09T16:18:30.562String s4 = String.valueOf(localDateTime);//对于引用数据类型转字符串底层也是toStringSystem.out.println(s4);//2024-05-09T16:18:30.562char[] c= {'j','a','v','a'};byte[] b= {65,66,67};System.out.println(String.valueOf(c));//javaSystem.out.println(String.valueOf(b));//[B@53d8d10a

8. 转换为char[ ]字符数组 

toCharArray() ---将字符串转为字符数组

// toCharArray() ---将字符串转为字符数组String s1 = "我爱学习,天天向上";char[] newCharArray = s1.toCharArray();System.out.println(Arrays.toString(newCharArray));//[我, 爱, 学, 习, ,, 天, 天, 向, 上]

9. 字符编码

在早期的计算机系统中,为了给字符编码,美国国家标准学会(American National Standard Institute:ANSI)制定了一套英文字母、数字和常用符号的编码,它占用一个字节,编码范围从0到127,最高位始终为0,称为ASCII编码。例如,字符'A'的编码是0x41,字符'1'的编码是0x31。

如果要把汉字也纳入计算机编码,很显然一个字节是不够的。GB2312标准使用两个字节表示一个汉字,其中第一个字节的最高位始终为1,以便和ASCII编码区分开。例如,汉字'中'的GB2312编码是0xd6d0。类似的,日文有Shift_JIS编码,韩文有EUC-KR编码,这些编码因为标准不统一,同时使用,就会产生冲突。

为了统一全球所有语言的编码,全球统一码联盟发布了Unicode编码,它把世界上主要语言都纳入同一个编码,这样,中文、日文、韩文和其他语言就不会冲突。Unicode编码需要两个或者更多字节表示,我们可以比较中英文字符在ASCII、GB2312和Unicode的编码:

●UTF-8 : 1汉字3字节

●GBK: 1汉字2字节

        // UTF-8 : 1汉字3字节// GBK: 1汉字2字节String s2 = "我是中国人";byte[] b =s2.getBytes("UTF-8");//按UTF-8编码转换System.out.println(Arrays.toString(b));
//注意:转换编码后,就不再是char类型,而是byte类型表示的数组。//字节数组转会到字符串String s3 = new String(b,"UTF-8");//按UTF-8编码转换System.out.println(s3);

[注]:Java的String和char在内存中总是以Unicode编码表示

10. String不可变性

●底层final修饰的char[]数组

●String类所提供的所有的方法,都是去new String()

小结

●Java字符串String是不可变对象
●字符串操作不改变原字符串内容,而是返回新字符串
●常用的字符串操作:提取子串、查找、替换、大小写转换等
●Java使用Unicode编码表示String和char
●转换编码就是将String和byte[]转换,需要指定编码
●转换为byte[]时,始终优先考虑UTF-8编码

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】C/C++中新const用法:const成员

欢迎来到CILMY23的博客 本篇主题为: C/C中新const用法:const成员 个人主页:CILMY23-CSDN博客 系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux 感谢观看,支持的可以给个一键三连,点赞…

医院预约挂号|基于Springboot+vue的医院预约挂号系统小程序的设计与实现(源码+数据库+文档)

医院预约挂号系统小程序 目录 基于Springboot+vue的医院预约挂号系统小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1小程序端 后台功能模块 4.2.1管理员功能 4.2.2医生功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选…

linux查看ip和端口

1. ip addr ip addr 或者 ip addr show 输出包含了网络接口的名称、状态、MTU(Maximum Transmission Unit)、链路层地址(如MAC地址)、IPv4和IPv6地址等信息。 2. 只需要 ip地址 ipV4 ip addr | grep inet ipV6 3.查看端口 s…

重磅更新:Facefusion换脸软件intel显卡专用版本整合包更新了

重磅更新!Facefusion换脸软件intel显卡专用版本,I卡用户也可以体验视频换脸了,独家针对Intel显卡优化,intel显卡视频换脸速度也很快,比cpu运行速度快十倍左右 目前测试Facefusion换脸工具intel显卡专用版本在A310、A3…

ardupilot开发 --- mavlink签名加密 篇

0. 一些概念 参考:MAVLink2 Signingmavlink2支持签名功能。 ArduPilot和Mission Planner能够通过使用加密密钥添加数据包签名,为空中MAVLink传输增加安全性。这并不加密数据,只是控制自动驾驶仪是否会响应MAVLink命令。这可防止其他不知道密…

Mysql8.0.30一次表锁问题的解决

起因 给material_config_field_data表的字段建立全文索引的时,发现该表卡死,然后无法对该表进行任何操作。 查找问题 执行sql #这个命令会显示InnoDB存储引擎的详细状态信息,包括锁等待和锁争用的信息 SHOW ENGINE INNODB STATUS结果 复制S…

#内部类#

1,概念 如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外 部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。重点:内部类是一个独立的类 注意&…

使用macof发起MAC地址泛洪攻击

使用macof发起MAC地址泛洪攻击 MAC地址泛洪攻击原理: MAC地址泛洪攻击是一种针对交换机的攻击方式,目的是监听同一局域网中用户的通信数据。交换机的工作核心:端口- MAC地址映射表。这张表记录了交换机每个端口和与之相连的主机MAC地址之间…

IDEA远程连接Docker服务

1.确保你的服务器已经安装docker docker安装步骤可查看:CentOS 9 (stream) 安装 Docker 2.安装完docker后开启远程连接 默认配置下,Docker daemon只能响应来自本地Host的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开TCP监听…

Vue 3.3 编译宏 vue3.3新增了一些语法糖和宏,包括泛型组件、defineSlots、defineEmits、defineOptions

Vue 3.3新增了一些语法糖和宏&#xff0c;包括泛型组件、defineSlots、defineEmits、defineOptions defineProps 父组件传参 <template><Child name"my"></Child> </template> <script setup lang"ts"> import Child fro…

成本降低 90%,出海社交平台 Typing 基于 Databend 的大数据探

Typing&#xff08;输入中科技&#xff09;成立于 2022 年&#xff0c;是一家主要面向东南亚、拉美、中东等海外地区提供社交平台的出海企业。其社交平台类似于国内的 Soul、陌陌等&#xff0c;提供视频直播、语音聊天室、短视频、生活分享、文字聊天等社交功能&#xff0c;注册…

Axure中继器介绍以及案例分享

中继器是 Axure 中一个比较高阶的应用&#xff0c;它可以让我们在纯静态网页中模拟出类似带有后台数据交互的增删改查的效果。 一、中继器的基本使用方法&#xff1a; 整体流程分为三个步骤 ☆创建中继器 我们先在 Axured画布中拖入一个中继器元件 双击中继器后的效果 打开之…

一套C语言开发的 PACS影像系统源码 PACS系统的基本概念、系统业务流程

PACS系统基本概念 PACS&#xff0c;全称 Picture Archiving and Communication Systems&#xff0c;中文意为影像归档和通信系统。它是应用于医院影像科室的一种系统&#xff0c;主要任务是把日常产生的各种医学影像&#xff08;包括核磁&#xff0c;CT&#xff0c;超声&#…

BeyondCompare4 下载\安装\免费使用

1. 官网 下载 Download Beyond Compare Free Trial 2. 安装&#xff08;无脑下一步&#xff09; 3.永久免费使用 修改注册表 A、在搜索栏中输入 regedit &#xff0c;打开注册表 B、 删除项目&#xff1a;计算机 \HKEY_CURRENT_USER\Software\ScooterSoftware\Beyond Compar…

命运交织的节点:分布式事务最终一致性的心跳共鸣纪实

关注微信公众号 “程序员小胖” 每日技术干货&#xff0c;第一时间送达&#xff01; 引言 在当今云计算和微服务架构大行其道的时代&#xff0c;分布式系统成为了构建高可用、高性能应用的基石。然而&#xff0c;随着系统规模的扩张&#xff0c;数据的一致性问题如同幽灵般萦…

mib browser读取mib文件的oid(飞塔防火墙为例)

在配置zabbix监控的时候,配置监控项最为麻烦,一般我们都会套用模板,这种方式比较简单,但是有些设备就是没有现成的zabbix模板,怎么办? 今天我们使用MIB Browser来获取设备SNMP的OID,然后加入zabbix 。 1.什么是MIB Browser SNMP客户端工具MIB Browser, 全名iReasonin…

华为手机 鸿蒙系统-android studio识别调试设备,开启adb调试权限

1.进入设置-关于手机-版本号&#xff0c;连续点击7次 认证&#xff1a;有锁屏密码需要输入密码&#xff0c; 开启开发者配置功能ok 进入开发者配置界面 打开调试功能 重新在androd studio查看可运行running devices显示了&#xff0c; 不行的话&#xff0c;重启一下android …

照片生成ai漫改头像生成漫画全套教程免费(自取)

今天给大家分享一一个AI漫改头像&#xff0c;轻松日增1000&#xff0c;简单操作好上手的一个互联网新项目&#xff0c;哈那其实AI漫改头像也火了差不多有半年左右了&#xff0c; 那其实利用AI软件将真人的照片生成漫画的形象&#xff0c;这个看起来很简单的方法却在小红书上大…

Vue入门到关门之Vue3学习

一、常用API 注意&#xff1a;本文项目均使用脚手架为 Vite 1、setup函数 &#xff08;1&#xff09;介绍 如果在项目中使用配置项API&#xff0c;那么写起来就和vue2的写法是一样的&#xff1b;但是如果在项目中写的是组合式API&#xff0c;那么组件中所用到的&#xff1a…

《架构即未来》读后感

目录 一、引言 二、《架构即未来》读后感 1、主题的简要介绍 2、我的看法和理解 3、作者的优点和传递的信息 4、思想如何适用于当今社会 三、《架构即未来》对于企业发展的影响具体体现在哪些方面&#xff1f; 一、引言 任何一个持续成长的公司最终都需要解决系统、组织…