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

字符串操作

  1. 截取字符串

    str.substring(beginIndex);   //返回一个新的字符串,该字符串从指定的索引beginIndex处的字符开始,直到endIndex处的字符。(beginIndex包括,endIndex不包括)
    str.substring(beginIndex,endIndex);
    
  2. 字符串替换

    str.replace(oldstr,newstr);   //返回一个新的字符串。oldstr为要替换的子字符串,newstr为替换后的子字符串。如果oldstr出现多次,则全部替换;如果没有找到oldstr,则返回原字符串。(oldstr大小写敏感)
    
  3. 字符串分割

    str.split(regex);   //以regex为分隔符,返回一个String数组。
    
  4. 大小写转换

    str.toLowerCase();   //字符串中所有字符转换成小写,返回一个新的 String 对象
    str.toUpperCase();   //字符串中所有字符转换成大写,返回一个新的 String 对象
    
  5. 去除空白内容

    str.trim();   //删除字符串首尾处的空白字符,返回一个新的 String 对象
    
  6. 比较字符串是否相等

    str.equals(str1);   //当且仅当进行比较的字符串不为null且str和str1内容相同时,结果为true。null和""是2种概念。
    

StringBuffer类

StringBuffer类是线程安全的可变字符序列,即线程安全的可变字符串。和String本质一样,但执行效率快很多,且创建的字符串序列是可修改的,实体容量会随着存放的字符串增加而自动增加。

  1. 创建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个字符
    
  2. append()方法

    sbf.append(obj);   //obj可为任意数据类型的对象,都会转成字符串的表现形式追加到sbf。
    
  3. setCharAt(int index, char ch)方法

    sbf.setCharAt(idnex,ch);   //将指定索引index处的字符修改为ch
    
  4. insert(int offset,String str)方法

    sbf.insert(offset,str);   //将字符串str插入到指定的索引值offset位置上。从指定索引[offset]开始向后移,str插进去
    //StringBuilder sbf1=sbf.insert(5, ", Java");先对sbf进行操作,再赋值给sbf1
    
  5. delete(int start,int end)

    sbf.delete(start,end)   //移除sbf内从索引start开始end结束(不包含)的子字符串。如果end-1超出最大索引范围,则一直到序列尾部。如果start=end,则不发生改变。
    //该方法会直接修改调用它的 StringBuffer 或 StringBuilder 对象,而不是创建一个新的对象。
    
  6. 其他方法

    有类似String类的用法,如lenth等。。。

java面向对象

类与对象

class 类名称{
//类的成员变量
//类的成员方法
}

成员变量的定义与普通变量的定义一样

成员方法

语法格式
[权限修饰符] [返回值类型] 方法名( [参数类型 参数名] ) [throws 异常类型]{
	...//方法体
	return 返回值;
}

权限修饰符:privatepublicprotected,也可以不写,用于控制方法的访问权限。

返回值类型:用于指定方法返回值的类型,可以是任意类型。如果方法不需要返回值,则使用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"
}
成员方法的参数

调用方法时传给方法的值叫实参;在方法内部接收实参的变量叫形参。形参只在方法内部有效。

  1. 值参数

    当你将一个参数以值传递的方式传递给函数或方法时,实际上传递的是该参数的一个副本,而不是参数本身。函数或方法内部对这个副本的修改不会影响到原始参数的值。对于基本数据类型,传递的是值的副本;对于引用类型,传递的是引用(内存地址)的副本。

    示例:

    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;   //输出形参
    	}
    }
    
  2. 引用参数

    给方法传递参数时,参数的类型是数组或其他引用类型,会将修改传递到实参。

  3. 不定长参数

    声明方法时,有若干个相同类型的参数,可以定义为不定长参数。

    权限修饰符 返回值类型 方法名(参数类型... 参数名)
    
    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的时候调用)

特点
  1. 方法名与类名相同

    构造方法的名称必须和所在类的名称完全一致,包含大小写。

    public class Person {
        // 构造方法,方法名与类名相同
        public Person() {
            System.out.println("Person 对象被创建");
        }
    }
    
  2. 没有返回类型

    构造方法没有返回类型,连 void 也不用写。这是构造方法和普通方法的一个重要区别。普通方法需要明确指定返回类型,如 intString 等。

    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
    
  3. 创建对象时自动调用

    当使用 new 关键字创建类的对象时,会自动调用相应的构造方法。构造方法在对象实例化的过程中起到初始化对象的作用。

    public class Book {
        public Book() {   //方法名和类名同名,为构造方法
            System.out.println("Book 对象被创建并初始化");
        }
    
        public static void main(String[] args) {
            // 创建 Book 对象,自动调用构造方法
            Book book = new Book();
        }
    }
    
  4. 可以重载

    和普通方法一样,构造方法也支持重载。也就是说,一个类中可以定义多个构造方法,只要它们的参数列表不同(参数的个数、类型或顺序不同)。通过构造方法重载,可以根据不同的需求来创建对象。

    即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;
        }
    }
    
  5. 若未定义构造方法,编译器会提供默认构造方法

  6. 可以使用 thissuper 关键字(构造方法接收外部参数,传递给类内部的成员变量,如构造方法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) {   //有参数构造方法
        //对成员变量进行初始化
	}
}
posted @ 2025-04-10 12:20  xixinyy  阅读(15)  评论(0)    收藏  举报