Integer.parseInt(s);//字符整数转换器
用于将字符转换为整数
这个方法的功能是接收一个字符串输入,然后尝试将其转换为对应的整数值。如果字符串的内容无法被解析为整数(比如包含非数字字符或者格式不正确),那么这个方法会抛出一个 NumberFormatException
异常。
this(1.0)//调用当前类构造器
例
public class Circle {
private double radius;
// 无参构造器
public Circle() {
this(1.0); // 调用带一个参数的构造器,设置默认半径
}
// 带一个参数的构造器
public Circle(double radius) {
this.radius = radius; // 使用提供的半径参数
}
}
- 当你创建一个
Circle
对象时,如果不提供半径(即使用无参构造器new Circle()
),则会自动调用this(1.0)
,这将调用带一个参数的构造器,默认设置radius
为1.0
。
java运行机制
半编译半解释型
源代码
程序员写的代码
处理器代码
处理器能够直接执行的代码
字节码
由java编译器将源代码转换为字节码(.class文件),再由JVM(java虚拟机)将字节码编译为本地机器代码
变量赋值
“0”开头表示该数为八进制数字,数位只能包含0~7,而078中,“8”违反了八进制,故会发生编译错误
源文件及主类
源文件可以多个,但必须且有且只能有一个主类,其余无主类的源文件可以是作为工具类或库类
局部变量初始化
例
class VarField {
int i=99;
void amethod(){
int i;
System.out.println(i);
}
}
当调用amethod时,由于其内部重新定义了一个局部变量i,但未对其进行初始化赋值,而局部变量是不会有默认初始值0的,它的值是随机的,这将导致使用它是发生编译错误
方法重写与方法重载
方法重写指在继承父类的时候重新定义父类的方法,要求是重写的方法必须具有相同的名称、参数列表(即方法签名)和返回类型(只修改函数体)。
方法重载指在同一个类中定义多个方法,他们之间具有相同的名称但参数列表不同(参数的类型、数量或顺序不同)。
例
class VarInBase{
int i=10;
public void print(){
System.out.println(""i=""+i);
}
}
class VarInSub extends VarInBase{
int i=100;
public void print(){
int i=1000;
System.out.println(""i=""+i);
}
}
public class Main{
public static void main(String args[]){
VarInBase m=new VarInSub();
m.print();
}
}
在该段代码中VarInSub继承了VarInBase,并重写了父类的print方法,这将使得后续创建VarInSub实例时,调用printf方法将优先使用子类重写的printf方法
Thread类
Java 中已经打包好了的用于多线程编程的核心类
其中包含一些重要方法
-
start()
: 启动线程,调用run()
方法。在调用此方法后,线程会通过操作系统调度执行。 -
run()
: 线程的主逻辑部分,包含线程执行的代码。一般情况下,这个方法会被覆盖。 -
sleep(long millis)
: 用于暂停当前线程一段指定的时间(毫秒)。可以用来控制线程的执行节奏。 -
join()
: 等待线程完成。调用t.join()
会使当前线程等待直到t
线程结束。 -
getName()
和setName(String name)
: 获取和设置线程的名称。 -
getPriority()
和setPriority(int priority)
: 获取和设置线程的优先级。
math类
其中包含一些常用的方法,如
-
随机数
Math.random()
: 返回一个介于 0.0(包括)到 1.0(不包括)之间的随机 double 值。
-
取整方法
Math.floor(double a)
:向下取整, 返回小于或等于a
的最大整数(以 double 的形式,1.0)。Math.ceil(double a)
: 向上取整,返回大于或等于a
的最小整数(以 double 的形式,1.0)。Math.round(double a)
: 四舍五入,返回a
四舍五入后的整数(为 long ,长整型,1)。
StringBuffer类
字符缓冲类,可直接对字符串进行操作,无需创建新的字符串对象,高效处理字符
常用方法
append(String str)
:将指定字符串添加到此字符串缓冲区。insert(int offset, String str)
:在指定位置插入字符串。delete(int start, int end)
:删除指定范围的字符。reverse()
:反转字符串内容。capacity()
:获取当前容量。length()
:获取当前长度(字符数)。toString()
:将StringBuffer
转换为String
对象。
当当创建一个新的 StringBuffer
对象时,它的初始容量为16,此时若调用capacity(),则会返回16
equals
StringBuffer的equals方法默认为比较地址,重写后才能比较字面字符是否相同
thrm()
去除字符串两端的空白字符
String类
常用方法
-
length()
:返回字符串的长度。charAt(int index)
:返回指定索引处的字符。substring(int beginIndex, int endIndex)
:返回字符串的子串。equals(Object another)
:比较两个字符串是否相等(区分大小写)。equalsIgnoreCase(String another)
:比较两个字符串是否相等(不区分大小写)。compareTo(String another)
:按字典顺序比较两个字符串。trim()
:去除字符串两端的空白字符。replace(char oldChar, char newChar)
:替换字符串中的字符。toLowerCase()
和toUpperCase()
:转换字符串的大小写。split(String regex)
:根据正则表达式分割字符串。contains(CharSequence s)
:检查字符串是否包含特定的序列。
运算顺序影响执行结果
该题执行顺序为,先对“i+2”进行运算,得到112,再对“112+lukey”进行运算,得到112lukey
而本题为,先对“lukey+i”进行运算,得到lukey110,此为字符串形式,再对“lukey110+2”进行运算,得到lukey1102
总之,是从前往后两个两个进行处理
finalize()
清理代码,用于在对象被垃圾回收之前提供一个“最后一次机会”来执行清理操作。这包括关闭文件、释放外部资源、取消注册或注销对象等。它可以用来防止潜在的资源泄露。
不推荐,可能会引起性能问题,一般推荐使用Object.close()
方法
Object类
即“实例类”,是所有java类的根类,即Java中的每个类都是object类的子类,不需显式导入
主要功能和方法
-
equals(Object obj)
:- 用于比较两个对象是否相等。默认实现是比较对象的引用,即检查两个对象是否指向内存中的同一个位置。你可以在子类中重写这个方法来提供基于内容的相等性比较。
-
hashCode()
:- 返回对象的哈希码值。默认实现是根据对象的内存地址计算哈希码。在重写
equals()
方法时,通常也需要重写hashCode()
方法,以确保相等的对象有相同的哈希码。
- 返回对象的哈希码值。默认实现是根据对象的内存地址计算哈希码。在重写
-
toString()
:- 返回对象的字符串表示。默认实现返回对象的类名和哈希码的无符号十六进制表示。通常在子类中重写这个方法以提供更有意义的信息。
-
getClass()
:- 返回运行时的
Class
对象,它表示对象的动态类。
- 返回运行时的
-
wait()
和notify()
和notifyAll()
:- 这些方法是用于多线程编程中的同步控制。
wait()
使当前线程等待,直到另一个线程调用相同对象的notify()
或notifyAll()
。
- 这些方法是用于多线程编程中的同步控制。
-
clone()
:- 用于创建并返回对象的一个副本。
Object
类中的实现会抛出CloneNotSupportedException
,因此你需要在子类中实现Cloneable
接口并重写clone()
方法来提供对象的复制功能。
- 用于创建并返回对象的一个副本。
-
finalize()
:- 这是一个过时的方法,用于对象被垃圾回收前执行清理操作。由于其使用上的限制和不确定性,现代Java编程中不推荐使用。
String特性
-
不可变性:
String
对象一旦创建,其内容就不能被改变。任何修改String
的操作都会产生一个新的String
对象。
-
常量池(String Pool):
- Java虚拟机(JVM)有一个特殊的内存区域,称为字符串常量池,用于存储字符串字面量。如果两个字符串字面量相同,它们将共享同一个
String
对象的引用,这样可以节省内存。
- Java虚拟机(JVM)有一个特殊的内存区域,称为字符串常量池,用于存储字符串字面量。如果两个字符串字面量相同,它们将共享同一个
等等...
如下题
在第三行中,String对象 str已经被创建,并初始化为123,这意味着后续将不能对 str 进行操作,如修改,增添,删减等
例
String str = " abcd123";
str.toUpperCase();
str.trim();
System.out.println(str);//abcd123
-
str.toUpperCase();
:这个方法调用会返回一个新的字符串,它是str
的大写版本(即" ABCD123"
),但这个新字符串并没有被赋值给任何变量,因此它不会改变str
。 -
str.trim();
:这个方法调用会返回一个新的字符串,去掉str
开头和结尾的空格(即"abcd123"
),同样这个新字符串也没有被赋值给任何变量,因此它也不会改变str
。
字符串常量是对象
String 对象存储字符串的效率比 StringBuilder 低
new出来的对象不共享
new完后成为一个新的对象,即使字符相同,二者的地址也不一样
成员变量继承
子类可以直接使用父类的成员变量
调用变量父类优先,调用方法子类优先
但当子类定义了一个和父类一样的成员变量,那么父类中相同的成员变量将会隐藏,直接使用时调用的是子类的成员变量
例
instanceof关键字
实例检查
用于判断某个对象是否为某个类型的实例,并返回布尔值
无论instanceof前面的还是后面的都对(继承关系)
例
A a = new B();
多态概念
创建了一个B的对象,当类型是A
这将使得a可以调用A的方法,也可以调用B中重写A的方法,但是不能调用B中独有的方法,成员同理
static静态块
只有当所有静态块按顺序执行完毕后,main方法才会执行
静态方法
直接通过类本身调用,而不是实例
静态方法不能被继承,也就是说,子类不会覆盖父类的静态方法。相反,子类的静态方法会隐藏父类的同名静态方法。
例
Integer.parseInt
可用于进制转换
例
String binaryString = "110"; // 二进制
int binaryNumber = Integer.parseInt(binaryString, 2);
System.out.println(binaryNumber); // 输出: 6
String hexString = "1A"; // 十六进制
int hexNumber = Integer.parseInt(hexString, 16);
System.out.println(hexNumber); // 输出: 26
compareTo
按字典序比较ASCII码值
小于放返回负数,大于返回正数,相等返回0
equalsIgnoreCase
忽略大小写比较字符
String str1 = "sdut12";
String str2 = "sDut12";
System.out.println(str1.equalsIgnoreCase(str2));//true
ArrayList 动态数组
特性
动态增减,无需定义;元素有序;可重复
- 动态数组:
ArrayList
允许你动态地增加或减少元素的数量,而不需要事先定义一个固定大小的数组。 - 有序性:
ArrayList
保持元素的插入顺序。 - 允许重复:
ArrayList
允许存储重复的元素。
主要方法
add(E e)
:在列表的末尾添加指定的元素。add(int index, E element)
:在指定位置插入元素。remove(int index)
:删除指定位置的元素。get(int index)
:返回指定位置的元素。set(int index, E element)
:用指定元素替换指定位置的元素。size()
:返回列表中元素的数量。clear()
:清空列表中的所有元素。contains(Object o)
:检查列表是否包含指定的元素。
编码解码
编码 getBytes(StandardCharsets.UTF_8),括号中放待编码类型
解码 new String(encodedBytes, StandardCharsets.UTF_8),第一个放待解码对象,第二个放要解码成的类型
输入流 read
读取结束后返回-1
返回值
- 返回一个字节(int 类型),表示读取的字节的值(范围在 0 到 255 之间)。
- 当到达流的末尾时,返回 -1,表示没有更多的数据可供读取。
只会返回int类型,不会返回NULL
例
字节流与字符流
区别在于每次读写数据的组织单位不同
字节流以字符为单位读写
字节流以字节为单位读写
文本中读取内容
Piped stream
管道流
用于在两个线程(通常在同一进程中)之间进行数据传输。它可以实现"管道"的效果,一个线程写入数据,另一个线程读取这些数据。这种流很好地支持进程间(或线程间)通信。
命名规范
- 变量名必须以字母(a-z,A-Z)、美元符号($)或下划线(_)开头,不能以数字开头。
- 变量名可以包含字母、数字、美元符号和下划线,但不能包含其他字符,例如空格或连字符(-)。
- 变量名不能与 Java 关键字相同。
- 变量名一般使用驼峰命名法。
StringBuilder类
StringBuilder
是可变的,它允许在原有的字符串基础上进行增删操作而不生成新的对象。
相较于StringBuffer,StringBuilder
是非线程安全的,而 StringBuffer
是线程安全的。由于线程安全机制会增加额外的开销,所以在单线程环境下,StringBuilder
通常会比 StringBuffer
更快。
Join()
属于Thread类,用于实现线程间的同步,确保某个线程在另一个线程完成执行之前不会继续执行
功能
join()
方法使当前线程等待直到调用join()
方法的线程终止。换句话说,被join()
方法调用的线程完全执行完毕之前,调用该方法的线程会被阻塞。
线程优先级
主函数,新建线程默认为普通优先级 5
线程优先级的等级一般是从 1 到 10,1 是最低优先级,10 是最高优先级。
字符串处理
substring用于返回指定字符串,第一个空为开头位置(按索引),第二个为截止位置(不输出)
replace用于替换字符串的某个内容(所有),第一个填需要替换的,第二个填替换后的。此方法可以用来替换字符串中的指定字符或字符串。在这种情况下,可以使用 replace(" ", "")
来将字符串中的所有空格替换为一个空字符串,从而有效地去除所有空格。
trim 用于去除字符串头尾的空格,但不能去除内部的
short 取值范围
−215 ~ 215-1
封装优点
可以不需要改变接口来改变实现,以达到外部使用代码无需改变。
IS-A关系
什么是什么
Collection 接口
Collection
接口定义了一系列重要的方法,这些方法用于集合的操作,包括:
-
元素添加和移除
boolean add(E e)
: 将指定的元素添加到集合中(如果集合允许重复,返回true
)。boolean remove(Object o)
: 从集合中移除指定的元素(如果存在,返回true
)。
-
元素访问
int size()
: 返回集合中的元素数量。boolean isEmpty()
: 判断集合是否为空。Iterator<E> iterator()
: 返回集合中元素的迭代器,允许遍历集合中的元素。
-
集合操作
boolean contains(Object o)
: 判断集合是否包含指定的元素。Object[] toArray()
: 将集合转换成数组。<T> T[] toArray(T[] a)
: 将集合转换成指定类型的数组。
-
集合间的操作
boolean addAll(Collection<? extends E> c)
: 将指定集合中的所有元素添加到当前集合中。boolean removeAll(Collection<?> c)
: 从当前集合中移除指定集合中的所有元素。boolean retainAll(Collection<?> c)
: 仅保留当前集合中在指定集合中的元素。