Java学习笔记_字符串/静态static

字符串的特点

  1. 字符串的内容永不可变
  2. 正是因为字符串不可改变,所以字符串是可以共享使用的
  3. 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组

创建字符串的常见3+1种方式
三种构造方法:
public String():创建一个空白字符串,不含有任何内容
public String(char[] array):根据字符数组的内容,来创建对应的字符串
public String(byte[] array):根据字节数组的内容,来创建对应的字符串

一种直接创建
String str = “Hello”;//右边直接用双引号

public class Demo{
	public static void main(String[] args){
		//使用空参构造
		String str1 = new String();
		System.out.println(“第1个字符串:” + str1);
		//根据字符数组创建字符串
		char[] charArray = {‘A’,’B’,’C’};
		String str2 = new String(charArray);
		System.out.println(“第2个字符串:”+str2);
		//根据字节数组创建字符串
		byte[] byteArray = {97,98,99};
		String str3 = new String(byteArray);
		//直接创建
		String str4 = “Hello”;
		System.out.println(“第4个字符串:” + str4);
	}
}

在这里插入图片描述

字符串的比较相关方法

public static void main(String[] args){
	String str1 = “Hello”;
	String str2 = “Hello”;
	char[] charArray = {‘H’,’e’,’l’,’l’,’e’};
	String str3 = new String(charArray);
	System.out.println(str1.equals(str2));
	System.out.println(str2.equals(str3));
	System.out.println(str3.equals(“Hello”));
	System.out.println(“str2”.equals(str1));
	
	String str4 = “hello”;
	System.out.println(str1.equals(str4));//false

	String str5 = null;
	System.out.println(“abc”.equals(str5));//推荐,false
	System.out.println(str5.equals(“abc”));
	//不推荐,报错,空指针异常NullPointerException

	String strA = “Java”;
	String strB = “java”;
	System.out.println(strA.equals(strB));//false,严格区分大小写
	System.out.println(strA.equalsIgnoreCase(strB));//true,忽略大小写 
	}

==是进行对象的地址值比较,如果确实需要字符串内容的比较,可以使用两个方法

public boolean equals(Object obj):
参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true
否则返回false
注意事项:

  1. 任何对象都能用Object进行接收
  2. equals方法具有对称性,a.equals(b)和b.equals(a)效果一样
  3. 如果比较双方一个变量一个常量,推荐把常量字符串写在前面
    推荐:“abc”.equals(str) 不推荐: str.equals(“abc”)

public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较

字符串的获取相关方法
public int length(); 获取字符串当中含有的字符串个数,拿到字符串的长度
public String concat(String str):
将当前字符串和参数字符串拼接成为返回值新的字符串
public char charAt(int index):
获取指定索引位置的单个字符。(从索引0开始)
public int indexOf(String str):
查找参数字符串在本字符串当中首次出现的索引位置,如没有,返回值为-1

public class Demo{
	//获取字符串长度
	int length = “adjghaurhuashf”.length();
	System.out.println(“字符串的长度是:”+length)//拼接字符串
	String str1 = “Hello”;
	String str2 = “World”;
	String str3 = str1.concat(str2);
	System.out.println(str3);//HelloWorld,新的字符串
	
	//获取指定索引位置的单个字符
	char ch = “Hello”.charAt(1);
	System.out.println(“在1号索引位置的字符是” + ch);

	//查找参数字符串在本来字符串当中出现的第一次索引位置
	String original = “HelloWorld”;
	int index = original.indexOf(“ll0”);
	System.out.println(“第一次索引值是:” + index)//2
	System.out.println(“HelloWorld”.indexOf(“abc”));//-1
}

字符串的截取方法

public String substring(int index);
截取从参数位置一直到字符串末尾,返回新字符串

public String substring(int begin,int end);
截取从begin开始,一直到end结束中间的字符串
备注:[begin,end),包含左边,不包含右边

public class Demo{
	public static void main(String[] args){
		String str1 = “HelloWorld”;
		Strint str2 = str1.substring(5);
		String str3 = str1.substring(4,7);
		System.out.println(str2);//world
		System.out.println(str3);//oWo
	}
}

字符串的转换相关方法

String当中与转换相关的常用方法:

public char[] toCharArray();
将当前字符串拆分成为字符数组作为返回值

public byte[] getBytes();
获得当前字符串底层的字节数组

public String replace(CharSequence oldString,CharSequence newString);
将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。

public static void main(String[] args){
	//转换成为字符数组
	char[] chars = “Hello”.toCharArray();
	System.out.println(chars[0]);//H
	System.out.println(chars.length);//5
	
	//转换为字节数组
	byte[] bytes = “abc”.getBytes();
	for(int i = 0; i < bytes.length; i++){
		System.out.println(bytes[i]);
	}
	
	String str1 = “How do you do?;
	String str2 = str1.replace(target:”o”,replacement:*);
	System.out.println(str1);//How do you do?
	System.out.println(str2);//H*w d* y*u d*?

字符串的分割方法
public String[] split(String regex)
按照参数规则,将字符串切分成为若干部分
注意事项:
split方法的参数其实是一个“正则表达式”
如果按照英文句点“.”进行切分,必须写“\.”

public class Demo{
	public static void main(String[] args){
		String str1 = “aaa,bbb,ccc”;
		String[] array1 = str1.split(reqex:,);
		for(int i = 0;i < array1.length;i++){
			System.out.println(array1[i]);
		}
	}
}

在这里插入图片描述

public class Student{
	private String name;
	private int age;
	static String room;

	public Student(){

	}
	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}
	public String getName(){
		return name;
	}
}

如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类。多个对象共享同一份数据。

public class Student{
	private int id;
	private String name;
	private int age;
	static String room;
	private static int idCounter = 0;//学号计数器,每当new了一个新对象的时候,计数器++

	public Student(){
		idCounter++;
	}

	public Student(String name,int age){
		this.name = name;
		this.age = age;
		this.id = ++idCounter;
	}
}

一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类。

如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。
如果有了static关键字,那么不需要创建对象,直接就能通过类名称来使用它

无论是成员变量,还是成员方法,那么必须首先创建对象,然后通过对象才能使用它
静态变量:类名称.静态变量
静态方法:类名称.静态方法()

注意事项:

  1. 静态不能直接访问非静态
    原因:因为内存当中是先有静态内容,后有非静态内容
  2. 静态方法当中不能用this
    原因:this代表当前对象,通过谁调用的方法,谁就是当前对象
public class Demo{
	public static void main(String[] args){
		MyClass obj = new MyClass();
		//首先创建对象,然后才能使用没有static关键字的内容
		obj.method();
		//对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称来调用
		obj.methodStatic();
		//正确,不推荐,这种写法在编译之后会被javac翻译成为“类名称.静态方法”
		MyClass.methodStatic();//正确推荐
	}
}
public class MyClass{
	int num;//成员变量
	static int numStatic;//静态变量
	//成员方法
	public void method(){
		System.out.println(“这是一个成员方法”)//成员方法可以访问成员变量
		System.out.println(num)
		//成员方法可以访问静态变量
		System.out.println(numStatic);	
	}

	//静态方法
	public static void methodStatic(){
		System.out,println(“这是一个静态方法”)//静态方法可以访问静态变量
		System.out.println(numStatic);
		//静态不能直接访问非静态
		System,out,println(num);//错误写法
		//静态方法中不能用this关键字
		System.out.println(this);//错误写法	
	}
}

在这里插入图片描述

静态代码块
静态代码块的格式:

public class 类名称{
static class 类名称{
//静态代码块的内容
}
}

特点:当第一次用到本类时,静态代码块执行唯一的一次
静态内容总是优先于非静态,所以静态代码块比构造方法先执行

静态代码块的典型用途:
用来一次性地对静态成员变量进行赋值

public class Demo{
	public static void main(String[] args){
		Person one = new Person();
		Person two = new Person();
	}
}

java.util.Arrays是一个与数组相关的工具类,里面提供了大量的静态方法,用来实现数组的常见操作

public static String toString(数组):将参数数组变成字符串(按照默认格式:[元素1,元素2,元素3 …])
public static void sort(数组):按照默认升序(从小到大)对数组的元素进行排序

备注:

  1. 如果是数值,sort默认按照升序从小到大
  2. 如果是字符串,sort默认按照字母升序
  3. 如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持。
public class Demo{
	public static void main(String[] args){
		int[] intArray = {10,20,30};
		//将int[]数组按照默认格式变成字符串
		String intStr = Array.toString(intArray);
		System.out.println(intStr);

		int[] array1 = {2,1,3,10,6};
		Array.sort(array1);
		System.out.println(Array.toString(array1));//[1,2,3,6,10]

		String[] array2 = {“bbb”,”aaa”,”ccc”};
		Array.sort(array2);
		System.out.println(Array.toString(array2));//[aaa,bbb,ccc]
	}
}

数学工具类
java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作

public static double abs(double num);//获取绝对值,有多种重载
public static double ceil(double num);//向上取整
public static double floor(double num);//向下取整
public static long round(double num);//四舍五入
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值