java学习(ing版)
原文链接:https://page.ccnyy.top/2025/04/01/java/
String
char[] a和String[] a的区别
char存储单个字符,string存储字符串对象
char[] a:数组元素以单个字符的形式存在。例如,{'H', 'e', 'l', 'l', 'o'}。String[] a:数组元素以字符串的形式存在。例如,{"Hello", "World"}。
String 实例化
可以使用String a = new String('gsbhs');创建String对象
String b = new String(a); 使用已有字符串变量实例化b
char[] charArray = {'a','b','c','d'};
String a = new String(charArray); //利用字符数组实例化 a='abcd'
String a = new String(charArray,1,2); //从字符数组索引1开始,提取2个元素,创建一个字符串
String 连接
只要'+'操作符的一个操作数是字符串,编译器会自动将另一个操作数转换成String
提取 String 信息
str.lenth(); //获取字符串长度
str.charAt(index); //获取字符串str内指定索引index的字符
str.indexOf(substr); //获取字符串str内指定的字符或字符串substr首次出现的索引位置,没检索到则返回-1
str.startsWith(prefix); //判断字符串str是否以指定的前缀prefix开始
str.endsWith(suffix); //判断字符串str是否以指定的后缀suffix结束
str.toCharArray(); //将字符串str转换成一个字符数组
str.contains(string); //判断字符串str内是否包含指定的内容string
字符串操作
-
截取字符串
str.substring(beginIndex); //返回一个新的字符串,该字符串从指定的索引beginIndex处的字符开始,直到endIndex处的字符。(beginIndex包括,endIndex不包括) str.substring(beginIndex,endIndex); -
字符串替换
str.replace(oldstr,newstr); //返回一个新的字符串。oldstr为要替换的子字符串,newstr为替换后的子字符串。如果oldstr出现多次,则全部替换;如果没有找到oldstr,则返回原字符串。(oldstr大小写敏感) -
字符串分割
str.split(regex); //以regex为分隔符,返回一个String数组。 -
大小写转换
str.toLowerCase(); //字符串中所有字符转换成小写,返回一个新的 String 对象 str.toUpperCase(); //字符串中所有字符转换成大写,返回一个新的 String 对象 -
去除空白内容
str.trim(); //删除字符串首尾处的空白字符,返回一个新的 String 对象 -
比较字符串是否相等
str.equals(str1); //当且仅当进行比较的字符串不为null且str和str1内容相同时,结果为true。null和""是2种概念。
StringBuffer类
StringBuffer类是线程安全的可变字符序列,即线程安全的可变字符串。和String本质一样,但执行效率快很多,且创建的字符串序列是可修改的,实体容量会随着存放的字符串增加而自动增加。
-
创建StringBuffer类
//创建StringBuffer类必须使用new而不能像String对象那样直接引用字符串常量 //String类 // 直接引用字符串常量 String str1 = "Hello"; // 使用 new 关键字创建对象 String str2 = new String("Hello"); //StringBuffer类 // 使用 new 关键字创建 StringBuffer 对象 StringBuffer sbf = new StringBuffer(); //创建一个对象,无初始值 StringBuffer sbf = new StringBuffer("Hello"); //创建一个对象,初始值为"Hello" StringBuffer sb = new StringBuffer(32); //创建一个对象,初始容量为32个字符 -
append()方法
sbf.append(obj); //obj可为任意数据类型的对象,都会转成字符串的表现形式追加到sbf。 -
setCharAt(int index, char ch)方法
sbf.setCharAt(idnex,ch); //将指定索引index处的字符修改为ch -
insert(int offset,String str)方法
sbf.insert(offset,str); //将字符串str插入到指定的索引值offset位置上。从指定索引[offset]开始向后移,str插进去 //StringBuilder sbf1=sbf.insert(5, ", Java");先对sbf进行操作,再赋值给sbf1 -
delete(int start,int end)
sbf.delete(start,end) //移除sbf内从索引start开始end结束(不包含)的子字符串。如果end-1超出最大索引范围,则一直到序列尾部。如果start=end,则不发生改变。 //该方法会直接修改调用它的 StringBuffer 或 StringBuilder 对象,而不是创建一个新的对象。 -
其他方法
有类似String类的用法,如lenth等。。。
java面向对象
类与对象
class 类名称{
//类的成员变量
//类的成员方法
}
成员变量的定义与普通变量的定义一样
成员方法
语法格式
[权限修饰符] [返回值类型] 方法名( [参数类型 参数名] ) [throws 异常类型]{
...//方法体
return 返回值;
}
权限修饰符:private、public、protected,也可以不写,用于控制方法的访问权限。
返回值类型:用于指定方法返回值的类型,可以是任意类型。如果方法不需要返回值,则使用void关键字。方法如果有返回值,则必须使用return关键字返回一个指定返回值类型的数据。
参数:可有可无。参数可以是对象,也可是变量。
示例:
//无返回值
public void showGoods() {
System.out.println("库存商品名称:");
System.out.println(FullName);
}
//有返回值
public int showGoods() {
System.out.println("商品库存名称");
return 1; //如果将"return 1;"删除,则会报错"This method must return a result of type int"
}
成员方法的参数
调用方法时传给方法的值叫实参;在方法内部接收实参的变量叫形参。形参只在方法内部有效。
-
值参数
当你将一个参数以值传递的方式传递给函数或方法时,实际上传递的是该参数的一个副本,而不是参数本身。函数或方法内部对这个副本的修改不会影响到原始参数的值。对于基本数据类型,传递的是值的副本;对于引用类型,传递的是引用(内存地址)的副本。
示例:
public class Book { public static void main(String[] args) { Book book = new Book(); int shelf = 30; //实参 int box = 40; //实参 System.out.println("把书架上的书全部放进箱子后,箱子里一共有" + book.add(shelf,box) + "本书。\n明细如下:书架上" + shelf + "本书,箱子里原有" + box + "本书。"); } private int add(int shelf,int box) { //传形参 box = box + shelf; //形参 return box; //输出形参 } } -
引用参数
给方法传递参数时,参数的类型是数组或其他引用类型,会将修改传递到实参。
-
不定长参数
声明方法时,有若干个相同类型的参数,可以定义为不定长参数。
权限修饰符 返回值类型 方法名(参数类型... 参数名)public class add { // 定义一个可变参数(不定长参数)的加法方法 public static int add(int... x) { int result = 0; for (int i = 0; i < x.length; i++) { result += x[i]; } return result; } public static void main(String[] args) { // 调用 add 方法并传入参数 int sum = add(1, 2, 3, 4, 5); // 打印计算结果 System.out.println("这些数的和是: " + sum); } }
构造方法(类似python的__init__,在创建类的对象时对对象进行初始化,new的时候调用)
特点
-
方法名与类名相同
构造方法的名称必须和所在类的名称完全一致,包含大小写。
public class Person { // 构造方法,方法名与类名相同 public Person() { System.out.println("Person 对象被创建"); } } -
没有返回类型
构造方法没有返回类型,连
void也不用写。这是构造方法和普通方法的一个重要区别。普通方法需要明确指定返回类型,如int、String等。public class Student { // 构造方法,没有返回类型 public Student() { System.out.println("Student 对象被创建"); } } Student student = new Student("John", 25); //开头的Student表示这个实例化的student对象是属于Student类的,类似定义一个String s = "123" //java10开始可以通过var自动判断是属于哪个类,即可用var代替Student -
创建对象时自动调用
当使用
new关键字创建类的对象时,会自动调用相应的构造方法。构造方法在对象实例化的过程中起到初始化对象的作用。public class Book { public Book() { //方法名和类名同名,为构造方法 System.out.println("Book 对象被创建并初始化"); } public static void main(String[] args) { // 创建 Book 对象,自动调用构造方法 Book book = new Book(); } } -
可以重载
和普通方法一样,构造方法也支持重载。也就是说,一个类中可以定义多个构造方法,只要它们的参数列表不同(参数的个数、类型或顺序不同)。通过构造方法重载,可以根据不同的需求来创建对象。
即java可以创建多个同名但参数列表不同的构造方法。通过不同的参数列表(参数的个数、类型或顺序不同)来确定使用哪个构造方法。
public class Rectangle { private int width; private int height; // 无参构造方法 public Rectangle() { width = 0; height = 0; } // 带一个参数的构造方法 public Rectangle(int side) { width = side; height = side; } // 带两个参数的构造方法 public Rectangle(int width, int height) { this.width = width; this.height = height; } } -
若未定义构造方法,编译器会提供默认构造方法
-
可以使用
this或super关键字(构造方法接收外部参数,传递给类内部的成员变量,如构造方法Person接收name和age,通过this关键字传递给name和age)class Person { String name; //定义成员变量 int age; // 构造方法 public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person person = new Person("John", 25); } }
定义语法
class Book {
public Book() { //构造方法
}
}
class Book {
public Book(int args) { //有参数构造方法
//对成员变量进行初始化
}
}

浙公网安备 33010602011771号