第一章 String类
- 概述
java.lang.String类代表了字符串,以后我们定义字符串的时候都用String对象.String对象中定义了比较、搜索、大小写转换等方法. - String类的特点
-
字符串在创建后不能再更改
内存分配步骤:
(1)第一段代码先在内存中创建了字符串数组[‘a’,‘b’,‘c’],同时还创建了一个s1的指针对 象,将s1指针指向到刚创建的数组,
(2) 第二段代码又从新创建了一个新的字符串数组[‘a’,‘b’,‘c’,‘d’,‘e’,‘f’],同时将s1指针指向到新的数组
(3)输出s1,实际输出的是s1指向的数组.最开始创建的数组就留在了内存中,由JVM垃圾回收机制处理.//初始化String对象s1,并赋值"abc" String s1 = "abc" s1 = s1 + "def"; System.out.println(s1);//输出结果:abcdef
-
字符串由于不可变,所以会出现共享的现象
为了避免内存的浪费,JAVA内部做了优化,上述代码内存中只创建了一块数组是[‘a’,‘b’,‘c’]的地址.同时栈中创建了两块地址,分别用来表示s1和s2.String s1 = "abc"; String s2 = "abc"
-
"abc"相当于char[] data={ ‘a’ , ‘b’ , ‘c’ }
例如: String str = "abc"; 相当于: char data[] = {'a', 'b', 'c'}; String str = new String(data);
说明: String底层是靠字符数组实现的,JAVA为了我们书写方便,我们可以不用每次再New一个String对象
-
String类的构造方法
//简写 String s = "abc" ; // 1-无参构造方法,默认为空字符串,不是空地址null String s1 = new String(); System.out.println(s1);// //2-字符数组参数构造方法 char chars[] = {'a','b','c'}; String s2 = new String(chars); System.out.println(s2); //3-字节构造方法,字节编号根据系统默认的字节编码来. byte bytes[] = { 97, 98, 99 }; String s3 = new String(bytes); System.out.println(s3);
知识扩展:
1-简写String s = “abc” 和String s1 = new String(“abc”)的区别
String s = "abc"会先检测内存中是否有"abc"的地址,如果有就直接利用了.
而 new String(“abc”)不去内存中检测,直接创建一块新的"abc"内存地址.
2- == 和equals的区别
==代表地址相等,equals代表值相等并且地址相等,但是String类重写的equals方法,只表示值相等.因此对String比较是否相等的时候用equals
- String的常用方法
(1) 判断功能的方法
public boolean equals (Object anObject) :将此字符串与指定对象进行比较。 public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进行比较,忽略大小 写。
(2) 获取的方法//简写 String s1 = "abc" ; String s2 = "bcd" if (s2.equals(s1)){ System.out.println("值相等"); }
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。
(3)转换的方法
public char[] toCharArray () :将此字符串转换为新的字符数组。
public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组。
public String replace (CharSequence target, CharSequence replacement) :将与target匹配的字符串使 用replacement字符串替换。
(3)分割方法
public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组。
public class String_Demo03 {
public static void main(String[] args) {
//创建字符串对象
String s = "aa|bb|cc";
String[] strArray = s.split("|"); // ["aa","bb","cc"]
for(int x = 0; x < strArray.length; x++) {
System.out.println(strArray[x]); // aa bb cc }
}
}
第二章Static关键字
-
概述
Static关键字可以用来修饰成员变量和成员方法,被Static修饰过的成员不属于对象,属于类,所以不用New一个新的实例对象,可以直接利用类名调用成员. -
静态变量
被Static修饰过的成员变量,成为类变量,该类的每个对象都共享该变量的值,任何一个对象都可以改变该类的值.
定义格式:
Static 数据类型 变量名;
例子:public class Student { //定义静态变量 public static int age = 10; private String name; public void show(){ System.out.println("姓名:"+ name + "age:"+age); } }
public class StaticDemo { public static void main(String[] args) { //直接给类中的静态变量赋值 Student.age = 100; Student student = new Student(); student.show(); } }
-
静态方法
被static修饰的方法为类方法,用类可以直接调用,而不用创建对象
格式:修饰符 static 返回值类型 方法名(参数列表){ // 执行语句 }
举例:
public class Student{ public static age = 10; public static void showAge(){ System.out.println("age:"+ age);} }
//用类直接调用 Student.showAge();
-
静态代码块
概述: 定义在成员位置,使用static修饰的代码块{ }。
位置:类中方法外。
执行:(重点注意)随着类的加载而执行且执行一次,优先于main方法和构造方法的执行
格式:public class classname{ static{ //静态代码块 } }
举例:
public class StaticDemo2 { public static ArrayList<Integer> list; static { list = new ArrayList<>(); list.add(10); list.add(20); list.add(30); } }
public static void main(String[] args) { //输出 System.out.println(StaticDemo2.list.get(0)); }
第三章Arrays类
- 概述
java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单 - Arrays静态方法
(1)将数组内容转换成字符串
格式:
Array.toString(数组)
举例:
(2)排序public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; System.out.println("此时输出的是内存地址:"+arr); String s = Arrays.toString(arr); System.out.println("转换成字符串输出:" + s); }
举例//排序 Arrays.sort(arr); System.out.println("排序后"+ Arrays.toString(arr));
第四章 Math
-
概述
类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单 -
基本运算方法
(1)public static double abs(double a) :返回 double 值的绝对值double d1 = Math.abs(‐5); //d1的值为5
(2)public static double ceil(double a) :返回大于等于参数的最小的整数,相当于向上去整
double d1 = Math.ceil(3.3); //d1的值为 4.0 double d2 = Math.ceil(‐3.3); //d2的值为 ‐3.0
(3)public static double floor(double a) :返回小于等于参数最大的整数,相当于乡下取整
double d1 = Math.floor(3.3); //d1的值为3.0 double d2 = Math.floor(‐3.3); //d2的值为‐4.0 double d3 = Math.floor(5.1); //d3的值为 5.0
(4)public static long round(double a) :返回最接近参数的 long。(相当于四舍五入方法)
long d1 = Math.round(5.5); //d1的值为6.0 long d2 = Math.round(5.4); //d2的值为5.0