目录:
- 1.Object类
- 2.String类
- 3.StringBuffer类
- 4.Math类
- 5.Random类
- 6.包装类
- (不断补充中...)
1.Object类
Object类是Java语言中的所有类的超类,即所有类的根。它中描述的所有方法,所有类都可以使用。
- equals( ) : 指示其他某个对象与此对象“是否相等” (比较的是两个对象的“内存地址”是否相同,一般要重写该方法)
- toString( ): 返回该对象的字符串表示 (是该对象的唯一标识: 类名+@+该对象的哈希码值的16进制字符串表示 / 类名+@+内存地址值),一般会重写 toString( ) 方法
- hasCode( ): 返回该对象的哈希码值。
public class Rectangle { //长方形类private int length;private int width;public int getLength() {return length;}public void setLength(int length) {this.length = length;}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}//重写toString()方法@Overridepublic String toString() {return "Rectangle{" +"length=" + length +", width=" + width +'}';}@Override //重写equals()方法: 改掉之前其是判断对象的内存地址是否一致的判断内容public boolean equals(Object obj) {Rectangle r = (Rectangle) obj;//如果两个长方形的长和宽相等,则其是相等的、相同的if (this.length == r.getLength() && this.width == r.getWidth()) {//重写了equals()方法让其判断长宽,而不是判断两个对象的内存地址是否相等return true;} else {return false;}} }
2.String类
String类是不可变的字符串,一旦String类被创建,该对象中的字符序列将不可改变 。
String的两种初始化方式:
①字符串赋值方式:
如: String str1 = “helloWorld”;
这种方式创建字符串时,JVM首先会检查字符串常量池中是否有该“字符串对象”,如果字符串常量池中存在该对象,那就不会在字符串常量池中再创建了,直接返回该字符串对象在字符串常量池中的“内存地址”。 如果字符串常量池中不存在该对象,那就先在字符串常量池值中创建该“字符串对象”,后返回
常量池中的内存地址。②构造函数初始化方式:
如: String str2 = new String(“hello world”);
用这种方式创建字符串的时候,JVM首先会检查“字符串常量池”中 是否存在该对象(helloworld)。
如果存在 则不会在字符串常量池中创建了。后会到堆内存中创建一份字符串的对象(String对象 ),
把字符串常量池中的 “helloWord”字符串内容拷贝到内存中的字符串对象中,最后返回堆内存中字符串对象(String)的“内存地址”。
如果不存在,会先在字符串常量池中创建"HelloWorld"字符串,后到堆内存中创建一份字符串String对象,把字符串常量池中的“helloWorld”拷贝到堆内存中的字符串对象中。最后返回堆内存中字符串对象的“内存地址”。/*如果字符串常量池中有该字符串,则返回其在字符串常量池中的内存地址。如果字符串常量池中没有该字符串,先在常量池中创建,后返回其在字符串常量池中的“内存地址”。*/String str1 = "hello world";/** 如果字符串常量池有“hello World”字符串存在,则不会在字符串常量池中创建。后在堆内存中创建一个字符串对象,把常量池中的该对象拷贝到堆内存的* 字符串对象中。最后返回堆内存中的字符串对象的“内存地址”给: str2(对象的引用,存储的是该对象的内存地址)* 如果字符串常量池中的“hello World”字符串不存在,则先在字符串常量池中创建。后在堆内存中创建一个字符串对象,把常量池中的该对象拷贝到堆内存的* 字符串对象中。最后返回堆内存中的字符串对象的“内存地址”给: str2*/String str2 = new String("hello World");
public class Demo1 {public static void main(String[] args) {//用构造方法创建一个String字符串对象String str1 = new String("abcd");//先检查字符串常量池中有没有...,后在堆内存中创建字符串对象...,最后返回该对象的内存地址System.out.println("str1=" + str1);//通过byte数组来创建字符串对象byte[] buf = {97, 98, 00, 100, 101, 102};String str2 = new String(buf);System.out.println("str2=" + str2);//从字节数组的下标1开始,长度为3来创建字符串对象String str3 = new String(buf, 1, 3); System.out.println("str3="+str3);//用字符数组来创建字符串char[] c = {'我', '是', '一', '个', '学', '生'}; //字符数组String str4 = new String(c);System.out.println("str4="+str4);String str5 = new String(c, 1, 3); //从字符数组的下标1开始,长度为3来创建字符串对象} }
public class Demo2 {public static void main(String[] args) {String str = "safANFiohkla12312sfbajksbhjkRFS";computerNumber(str);}private static void computerNumber(String str) {int bigCount = 0; //大写字母的个数int smallCount = 0; //小写字母的个数int numberCount = 0; //数字的个数for (int i = 0; i < str.length(); i++) {//获取指定位置上的字符char ch = str.charAt(i); //获得字符if (ch >= 'A' && ch <= 'Z') { //该字符在这个范围内,则其是大写字母bigCount++;} else if (ch >= 'a' && ch <= 'z') { //小写字母的范围smallCount++;}else if (ch >= '0' && ch <= '9') //0-9数字的范围numberCount++;}System.out.println("小写字母的个数为: " + bigCount);System.out.println("大写字母的个数为: " + smallCount);System.out.println("数字个数为: " + numberCount);} }
/*将字符串中第一个字母转换为大小,其他转换为小写,并打印改变后的字符串*/ public class Demo2 {public static void main(String[] args) {//创建一个字符串对象String str = "abcadASDAF";System.out.println(covert(str));}//将第第一字母转换为大写,其他字母转换为小写private static String covert(String str) {//获取第一个字母String start = str.substring(0, 1); //左开右闭//获取除第一个字母之外的其他字母String end = str.substring(1); //从下标1开始往后的字母//将第一个字母转换为大写String big = start.toUpperCase();String small = end.toLowerCase();//把这两部分字符串连接在一起,得到一个完整的字符串return big + small;} }
3.StringBuffer类
String类是不可变的字符串,一旦 String类被创建,该对象中的 字符序列将不可改变
不同于String,StringBuffer(字符串缓冲类)的“内容和长度”是可变的。StringBuffer类似于一个
字符容器,在其中不断添加和删除字符时,并不会产生新的StringBuffer对象。(ps: 字符串加入到StringBuffer后,将转换为一堆字符存储在其中。
public class Demo {public static void main(String[] args) {//使用StringBuffer的无参构造方法创建一个字符缓冲类StringBuffer sb = new StringBuffer();System.out.println(sb);//输出空白,因为该字符串缓冲类中还没有数据//往字符串缓冲类中添加字符串sb.append("abcdabcfaabc");System.out.println(sb);//在指定的索引位置下插入数据sb.insert(2, "小明"); //索引2下的插入一个字符串,如有冲突会将其中的字符往后挤。System.out.println(sb);//删除指定范围内的数据sb.delete(3, 6); //左开右闭System.out.println(sb);//根据指定的索引删除指定的一个字符sb.deleteCharAt(5);System.out.println(sb);//将指定范围的索引替换为想要替代的“字符串” ---字符串添加到字符串缓冲区中就变成字符,操作的也是其中的字符sb.replace(1, 5, "陈小明");System.out.println(sb);//翻转字符串的中内容sb.reverse();System.out.println("翻转: "+sb);//将指定索引下的字符替换成你想要换的字符sb.setCharAt(3, '红');System.out.println(sb);//截取子串String subString = sb.substring(2,5);//左闭右开System.out.println("子串的内容为: " + subString);//查找指定的“字符串”在StringBuffer中第一次出现的索引值int index = sb.indexOf("abc", 0); //从索引0处开始往后找System.out.println("索引值为: "+index); //如没找到时,返回-1//追加数据sb.append("JavaJava");System.out.println(sb);//查看字符数组的长度System.out.println("字符数组长度为: "+sb.capacity());//查看StringBuffer的长度System.out.println("StringBuffer中字符个数为(长度为): " + sb.length());//根据指定的索引找指定位置的字符System.out.println("指定索引位置的字符为: " + sb.charAt(5));System.out.println(sb);} }
4.Math类
Math 类是包含执行基本数学运算的方法的“数学工具类”,如初等指数、对数、平方和三角函数等。
Math类的两个常量: PI(常量π) 和 E(常量e)
Math类特点:
其所有方法为静态方法,并且一般不会创建对象。public class MathTest { //Math类的相关内容public static void main(String[] args) {//ceil()方法,结果为比参数值大的最小整数的double值double d1 = Math.ceil(3.3); //4.0double d2 = Math.ceil(-3.3); //-3.0double d3 = Math.ceil(5.1); //6.0System.out.println(d1 + " " + d2 + " " + d3);//floor方法, 结果为比参数值小的最大整数的double值double d4 = Math.floor(3.3); //3.0double d5 = Math.floor(-3.3);//-4.0double d6 = Math.floor(5.1); //5.0System.out.println(d4 + " " + d5 + " " + d6);//round方法,返回参数四舍五入的结果double d7 = Math.round(5.5); //6double d8 = Math.round(5.4);//5System.out.println(d7 + " " + d8);//max方法,返回两个参数中值较大的值double d9 = Math.max(3.3,5.5); //5,5double d10 = Math.max(-3.3,-5.5);//-3.3System.out.println(d9 + " " + d10);//min方法同理//random方法,产生一个大于等于0.o小于1.0的double小数System.out.println("--------------------");double d11 = Math.random(); //产生一个大于等于0.0 小于1.0的double值System.out.println(d11);} }
5.Random类
在JDK的包下有一个Random类,它可以在 指定的取值范围内(自定义范围)产生随机数。
Random类有两个构造方法如果使用相同的种子,那么产生的随机数序列是一样的,这就意味着如果想要生成相同的随机数序列,那么种子相同即可。
(如果两个Random对象的种子是一样的,那么两者生成的随机数也会是一样的)Random( ) : 生成一个为随机数生成器。
Random( long seed ) : 使用“特定的种子”来创建为伪随机数生成器(如果两个Random对象的种子是一样的,那么其生成是随机数也会是一样的)public class RandomTest { //Random类的相关内容public static void main(String[] args) {/*如果使用相同的种子,那么生成的随机数序列是一样的。那就意味着, 如果想要生成相同的随机数序列,只需要使用相同的种子即可。*///创建一个没有种子的Random对象Random random1 = new Random();for (int i = 0; i < 5; i++) {//产生5个0-100之间的随机数 (左闭右开)int num = random1.nextInt(100);//左闭右开System.out.print(num+",");}System.out.println();/*因为两个Random对象没有用同一个种子,所以产生的5个随机数不一样会相等*/Random random2 = new Random();for (int i = 0; i < 5; i++) {//产生5个0-100之间的随机数 (左闭右开)int num = random2.nextInt(100);//左闭右开System.out.print(num+",");}System.out.println();System.out.println("----------------------");//创建有种子的Random对象,种子为13Random random3 = new Random(13);for (int i = 0; i < 5; i++) {//产生5个0-100之间的随机数int num2 = random3.nextInt(100);System.out.print(num2+",");}/** * 这里和上面用的是同一个种子的Random对象,所以产生的5个随机数和上面产生的5个随机数是一样的 */System.out.println();Random random4 = new Random(13);for (int i = 0; i < 5; i++) {//产生5个0-100之间的随机数int num2 = random4.nextInt(100);System.out.print(num2+",");}} }
6.包装类
在Java很多类都需要接入引用类型的对象,此时就无法将一个基本数据类型的值传如入。
为了解决这一系列的问题,JDK提供了一系列的包装类。通过包装类可以"基本数据类型"的值为引用数据类型的对象。包装类特点: 在Java中,每一种基本类型都有对应的包装类。
public class Demo1 { //包装类的相关内容public static void main(String[] args) {int i = 10; //基本数据类型double d = 20.0;//将"基本数据类型"转换为String类型String str1 = String.valueOf(i);String str2 = String.valueOf(d);System.out.println(i+" "+d);//创建包装类: IntegerInteger i1 = 20; //包装类型Double d1 = 30.0;System.out.println(i1+" "+d1);//用toString()方法,返回值为String类型//包装类中的方法被重写了,输出的值String str3 = i1.toString();String str4 = d1.toString();System.out.println(str3+" "+str4);} }
public class Demo2{public static void main(String[] args) {String str1 = "50";String str2 = "30.41";String str3 = "true";//用包装类的.parseInt()方法将字符串类型数据转换为int类型int num1 = Integer.parseInt(str1);//用包装类将String类型转换为double类型double num2 = Double.parseDouble(str2);boolean bool = Boolean.parseBoolean(str3);System.out.println(num1+" "+num2+" "+bool);} }
public class Demo3 {public static void main(String[] args) {//用包装类的valueOf()方法将String类型数据转换为"包装类型"String str1 = "50";String str2 = "30.41";String str3 = "true";//字符串转换为包装类型Integer i = Integer.valueOf(str1);Double d = Double.valueOf(str2);Boolean b = Boolean.valueOf(str3);System.out.println(i+" "+d+" "+b);} }