一、代码块
代码块: {} 括起来的代码被称为代码块
分类:
局部代码块: 方法中定义的代码块,它的作用主要是限制变量的作用范围
构造代码块:类中的方法外(类的成员位置),每次在构造方法执行之前会先执行构造代码块
作用: 如果多个构造方法中有相同的代码,可以放在构造代码块中
**每个构造方法执行之前,都会先执行构造代码块**
静态代码块:类中的方法外(类的成员位置),用{}括起来,且在前面加上static关键字
作用: 对类进行初始化,仅仅执行1次
代码块的执行顺序 : 静态代码块 > 构造代码块 > 局部代码块
二、包
java中包的本质 : 就是文件夹
注:在一个文件夹下面同名的同类型的文件只能出现一个
当有多级目录的时候,java中
包名1.包名2.包名3
直接右键选择创建包, 如:com.gxa.student idea中看到的一个目录文件夹,但是实现上是创建了3个文件夹
创建包: 选择src 右键 new -> package
1.包名的命名规则
包名用小写字母,不要驼峰,不要中文
举例:
学生 增加 删除 修改 查询
老师 增加 删除 修改 查询
方案一:按照功能划分
公司网址的倒序
com.gxa.add
AddStudent.java
AddTeacher.java
com.gxa.del
delStudent.java
delTeacher.java
方案二:按照模块划分
com.gxa.student
AddStudent.java
DelStudent.java
UpdateStudent.java
SearchStudent.java
2.怎么在包中放类
使用package 声明这个类在哪一个包下
3.不同包下面的类的访问
使用import 关键字,导入包
导入包的两种方法
-
单类型导入(导一个)
import com.gxa.student.Student;
import com.gxa.student.Person;
-
按需导入
import com.gxa.student.*;
按需类型导人 (type-import-on-demand), 例如import java. util.*
单类型导入比较好理解,编程所使用的各种工具默认都是按照单类型导入的,
需要什么类便导人什么类,这种方式是导入指定的public类或者接口;
按需类型导入,比如 import java. util. * 可能看到后面的* 程序员会以为是导
入java. util 包下的所有类, 其实并不是这样,Java会根据名字知道是按照需
求导入,并不是导入整个包下的所有类。
按需类型导入是绝对不会降低Java 代码的执行效率的,但会影响到Java代码的编译速度。
所以在编码时最好是使用单类型导入,这样不仅能提高编译速度,也能避免命名冲突。
4.全局导入和局部导入
全局导入 在当前整个类上面都可以使用导入的类
import com.gxa.find.Teacher;
局部导入 用的非常少 如果要使用的类和全局导入的类名相同,可以使用局部导入 一次性
com.gxa.update.Student s2=new com.gxa.update.Student();
三、工具类
封装一些常用的公共的静态方法
工具类一般都静态方法
自己写工具类
1.java 提供的API
API(回顾)
API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。
API使用步骤
1.打开帮助文档。
1. 点击显示,找到索引,看到输入框。
2. 你要找谁?在输入框里输入,然后回车。(如果输入类名称只有一个直接打开,如果多个则需要选择)
3. **看包。**java.lang下的类不需要导包,其他需要。
4. **看类的解释和说明**。
5. 学习**构造方法**。
6. 使用**成员方法**。
注:java.util.* java中工具类
java.lang.* 该包下的所有的java类 在使用时不需要导入包
2.常用类
Object类/ Scanner类
String类/ StringBuffer类 / StringBuilder类
Arrays类
基本类型包装类(Integer,Character)
正则表达式(Pattern,Matcher)
Math类/Random类/System类
Biglnteger类 / BigDecimal 类
Date类/ DateFormat类 / Calendar类
已经学过: Scanner类, Random类
在java.lang下面的类,可以不用导入.请问为什么? 不需要手导入,它已经自动导入了
java.lang 包是java语言的核心, 它提供了java中的基础类。包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。
String 类 / Math类 / Arrays类
3.String 类
概述
java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如 “abc” )都可以被看作是实现此类的实例。
类 String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写或小写的所有字符的字符串的副本.
-
特点:
-
字符串不变:字符串的值在创建后不能被更改。
-
因为String对象是不可变的,所以它们可以被共享。
-
“abc” 等效于 char[] data={ ‘a’ , ‘b’ , ‘c’ } 。
-
-
字符串的构造方法
new String(字符串)
new String(char[]);
new String(byte[]);
-
字符串判断方法
public boolean equals (Object anObject) :将此字符串与指定对象进行比较。
public boolean equalsIgnoreCase (String anotherString) :
将此字符串与指定对象进行比较,忽略大小写。
Object 是” 对象”的意思,也是一种引用类型。作为参数类型,表示任意对象都可以传递到方法中。
问题 : equals 与 == 的区别
获取功能的方法
public int length () :返回此字符串的长度。
public String concat (String str) :将指定的字符串连接到该字符串的末尾。
public char charAt (int index) :返回指定索引处的 char值。
public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引。
public String substring (int beginIndex) :返回一个子字符串,从beginIndex开始截取字符串到字符
串结尾。
public String substring (int beginIndex, int endIndex) :返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
转换功能的方法
public char[] toCharArray () :将此字符串转换为新的字符数组。
public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组。
public String replace (CharSequence target, CharSequence replacement) :将与target匹配的字符串使用replacement字符串替换。
CharSequence 是一个接口,也是一种引用类型。作为参数类型,可以把String对象传递到方法中。
分割功能的方法
public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组。
// 该方法的工作原理是通过使用给定表达式和限制参数为零调用双参数[`split`](../../java/lang/String.html#split-java.lang.String-int-)方法。因此,尾随的空字符串不会包含在结果数组中。
4.Math类
Java Math 类的作用
Java Math 类是 Java 标准库中的一个类,它提供了很多数学函数和常量。Java Math 类是一个 final 类,因此不能被继承。它包含了以下常量和方法:
常量:
E:自然对数的底数
PI:圆周率
方法:
abs():返回一个数的绝对值
max():返回两个数中较大的那个数
min():返回两个数中较小的那个数
pow():返回一个数的某个次幂
sqrt():返回一个数的平方根
sin():返回一个数的正弦值
cos():返回一个数的余弦值
tan():返回一个数的正切值
log():返回一个数的自然对数
exp():返回一个数的指数值
**ceil():返回一个数的上限整数**
**floor():返回一个数的下限整数**
**round():返回一个数的四舍五入整数**
**random()方法可以生成一个范围在0到1之间的随机浮点数。**
5.Arrays类
Arrays.toString()方法
方法作用:快速输出数组内容,可以偷偷懒
int[] a = {1,2,3,4,5};
System.out.println(Arrays.toString(a));
// 输出格式:[1,2,3,4,5]
Arrays.sort()方法
方法运用:给数组排序,默认升序
int[] a = new int[]{5,4,3,2,1};
Arrays.sort(a); // 1 2 3 4 5
System.out.println(Arrays.toString(a));
// [1,2,3,4,5]
https://blog.youkuaiyun.com/qq_62939743/article/details/123435767
Arrays.equals()方法
方法作用:比较两个数组内容是否相等
int[] a = {1,2,3};
int[] b = {1,2,3};
boolean isSame = Arrays.equals(a,b);
//true
注意:Arrays.equals()是比较数组内容,而a.equals(b) 这样的方法是比较地址值
以后使用java提供的引用数据内容(数组、字符串、各种集合…)时,一定要用equals()方法比较内容是否相等,而不是傻傻的用 ==了!因为官方已经把equals()给重写了。如果你要比较你自己写的类,例如学生按成绩排序,就要自己重写equals()方法
Arrays.binarySearch()
方法作用:在数组中查找元素
int Arrays.binarySearch( Datatype[], Datatype key)
再数组中查找指定值,若找到,则返回此值的下标,
若没找到,返回 -插入点-1;
如:
int[] a = {1,5,6,7};
Arrays.binarySearch(a,2) //没找到,插入点为1,则返回 -2
Arrays.binarySearch(a,4) //没找到,插入点为1,则返回 -2
Arrays,binarySearch(a,8) //没找到,插入点为4,则返回 -5
Arrays.binarySearch(a,5) //找到了!返回下标 1
只要返回值 ≥ 0 ,就代表找到了。
Arrays.copyOf()
方法作用:拷贝数组
源码如下:第一个参数是原数组,第二个参数是拷贝长度,返回值是将原数组拷贝一份返回
(它的底层其实是调用了System.arrayCopy()方法)
Arrays.copyOf()的拷贝是从下标0开始的,如果你想从其他下表开始,可以使用Arrays.copyOfRange()方法
6.System类
java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作
public static long currentTimeMillis():返回以毫秒为单位的当前时间
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):
将数组中指定的数据拷贝至另一个数组中
参数说明:
src:源数组
srcPos:源数组中的起始位置
dest:目标数组
destPos:目标数组中的起始位置
length:要复制的元素个数
System.arraycopy()方法的性能非常高,因为它是由底层代码实现的,并且能够利用硬件的特性来进行快速的数据复制。它通常比使用循环逐个复制数组元素要快得多。
System.arraycopy() 可以用于向上或向下转型,但在使用时要谨慎,确保数据类型兼容性和运行时类型检查。如果数据类型不匹配,虽然可通过编译,但运行时会跑出运行时异常java.lang.ArrayStoreException。最好的做法是尽量避免不必要的类型转换,以保持代码的清晰性和可维护性。
测试:
第一题:
需求实现 反转键盘录入的字符串。
第二题:
需求实现: 键盘录入QQ号码,验证格式的正确性。 必须是5—12位数字。 0不能开头。
第三题:
需求实现: 字符串查找。 键盘录入一个大字符串,再录入一个小字符串。 统计小字符串在大字符串中出现的次数。
第四题:
需求实现 :替换某字符串中的某字符串。 键盘录入一个srcStr字符串,再录入一个delStr字符串。 删除该字srcStr符串中的所有delStr字符串。