JAVA Object Scanner String Math System 各类的定义概念和常用方法

Object Scanner String Math System 各类的定义概念和常用方法

很多方法大致记下有个概念就行,不必完全背熟,等有需求时知道在哪查看下再用就行

Object

Object类是所有类的根类,是一个顶层父类,是所有引用数据类型(包括数组)都拥有这个类的所有方法

Object的构造方法:Object();

  • 可以创建一个Object对象

  • 这个构造方法会被所有的子类调用

  • 这个方法不会调用super语句

Object可以被引用成一切类的对象

例如:Object obj = new Person();

常用的方法

toString()

返回一个对象的打印结果

不重写toString()方法的话输出的就是一个内存地址:getClass().getName() + “@” +Integer.toHexString(hashCode());

实质:类名 + @ +十六进制的哈希值 这样没有意义,所以需要重写

重写的原则:返回该对象中所有成员变量的值 以后记住自定义类的时候要重写toString方法

equals(Object obj):
  • 用于比较两个对象是否相等的方法,比较的是调用者和参数这两个对象

  • 在Object类型中,比较的是两个引用是否指向了同一个对象,如返回是true,相当于比较两个对象的地址值是否相同

  • 实际生活中,比较的是两个对象的属性值,比较地址值没有意义,所以在自定义子类中都要重写这个方法

  • 写的原则:一般用于比较两个对象中所有属性,是否相同

package Test2;
public class Tt {
	public static void main(String[] args) {
		Object ob1 = new Object();
		Object ob2 = new Object();
		System.out.println(ob1.equals(ob2));//比较地址值是否相同
		Person p1 = new Person();
		Person p2 = new Person();
		Person p3 = new Person(27,"马内");
		Person p4 = new Person(28,"萨拉赫");
		System.out.println(p1.equals(p2));//true
		System.out.println(p3.equals(p4));//false
		System.out.println("============================");
		System.out.println(p1);//没重写方法前输出Test2.Person@3c1
		System.out.println("        ||            ");
		String className = p1.getClass().getName();
		String hexString = Integer.toHexString(p1.hashCode());//16进制
		System.out.println(className + "@" + hexString);
		System.out.println(p1);//重写toString()方法后 输出Person [age=0, name=null]
	}	
}
class Person{
	int age;
	String name;
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Person(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {//重写equals()
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "Person [age=" + age + ", name=" + name + "]";
	}
}

在这里插入图片描述

==和equals的比较

==和equals都是用来比较数据是否相等的方式

区别

比较的内容不同:

  • ==基本数据类型和引用数据类型都可比较

  • equals只能比较引用数据类型,不能比较基本数据类型

比较规则不同:

  • ==对于基本数据类型比较的是数值,对于引用数据类型,比较的是地址

  • equals重写之前,比较的是地址,重写之后比较的是属性值

package Test2;

public class Tt {
	public static void main(String[] args) {
		int a = 1;
		int b = 6;
		System.out.println(a == b);
		// System.out.println(a.); equals只能比较引用数据类型
		String str = "abc", str2 = "bcd", str3 = "abc";
		// abc 常量字符串,只在常量池中存储一份 所以地址就一样
		System.out.println(str == str2);// false
		System.out.println(str == str3);// true
		System.out.println(str.equals(str3));// true
		System.out.println(str.equals(str2));// false
		System.out.println("==============================");
		Person p1 = new Person(21, "阿诺德");
		Person p2 = new Person(25, "罗伯逊");
		System.out.println(p1 == p2);// false 比较地址
		System.out.println(p1.equals(p2));// false 比较属性
	}
}

class Person {
	int age;
	String name;

	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Person(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {// 重写equals()
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;![在这里插入图片描述](https://img-blog.csdnimg.cn/20200711141523382.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FqdW40,size_16,color_FFFFFF,t_70)
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Person [age=" + age + ", name=" + name + "]";
	}
}

在这里插入图片描述

Scanner

就是一个文本扫描器,可以扫描指定的数据,用于获取键盘输入

属于java.util包,不是属于java.lang包下,所以都要导包

常用的构造方法

  • Scanner(File f):扫描指定文件

  • Scanner(String path):扫描指定路径

  • Scanner(InputStream source) :指定一个输入流对象,这个输入流对象就是System.in(系统输入流),此时默认关联到键盘设备,控制台等待输入,直到敲回车键结束,把输入的内容传给Scanner作为扫描对象。如果要获取输入的内容,就调用Scanner的nextLine()等方法即可。

基本数据类型的扫描

(1) nextByte() 获取一个byte类型

(2) nextShort() 获取short类型

(3) nextInt();

(4) nextLong()

(5) nextFloat()

(6) nextDouble()

(7) nextBoolean()

没有nextChar,因为只要输入字符就把他当做String来看待了

一次性想要录入多个数据,可以使用空格进行分隔

引用数据类型的扫描

(1) next():获取一段字符串数据,遇到空格扫描结束,即next()不能得到带有空格的字符串

注:一定要读取到有效字符后才可以结束输入,对读取到有效字符之前遇到的空白,自动将其去掉

(2) nextLine();获取一个字符串数据,扫描一行,遇到回车换行符结束,返回的是输入回车之前的所有字符

package Test2;

import java.util.Scanner;
public class Tt {
	public static void main(String[] args) {
		show1();//连续调用nextLine第一就会将空串吃掉,第二次就会等待继续录入
		show2();//创建两个Scanner对象,第一个录入以换行为间隔的,第二个录入以空格为间隔的
		show3();//所有的录入都以字符串形式录入,然后进行数据类型之间的转换
	}

	private static void show3() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入字符串");
		String str = sc.nextLine();//所有的录入都以字符串形式录入,然后进行数据类型之间的转换
		int num = Integer.parseInt(str);
		System.out.println(str);
	}

	private static void show2() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入字符串");
		String str = sc.next();
		System.out.println(str);
		System.out.println("==================");
		System.out.println("请输入字符串");
		Scanner sc1 = new Scanner(System.in);//创建两个Scanner对象,第一个录入以换行为间隔的,第二个录入以空格为间隔的
		String str3 = sc1.nextLine();
		System.out.println(str3);
		
	}

	private static void show1() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入字符串");
		String str = sc.next();
		System.out.println(str);
		System.out.println("==================");
		System.out.println("请输入字符串");
		String str2 = sc.nextLine();
		String str3 = sc.nextLine();//连续调用nextLine第一就会将空串吃掉,第二次就会等待继续录入
		System.out.println(str3);
	}
}

在这里插入图片描述

String

属于java.lang包

所有的字符串常量,都是String类型的对象,双引号引起来的字符串都是常量,存储在方法区中的常量池

String是一个不可变的字符串,这个指的是字符串指向的那块区域中存储的字符是不可以变的

不可变的原因,String类型只提供了构造方法,没有提供set方法,因此只能在创建对象的时候,初始化成员变量,将来对象创建完成之后,无法通过方法来修改

String的构造方法

String():空参数构造

String(String orignal): 调用构造方法时会在堆内存创建一个指定字符串的副本(参数是常量区的字符串,创建副本,存储在堆内存中)

在这里插入图片描述

new出来的两个对象str和str2都同时指向JVM字符串常量池中的"aaa"对象

String(byte[] arr): 将一个byte数组中的元素转为字符串

String(byte[] arr,int offset, int length):将指定的byte数组,从offset位置开始,length个长度的元素转为字符串,包含offset位置的元素

String(char[] arr):同上

String(char[] arr,int offset, int length):同上

package Test2;

public class Tt {
	public static void main(String[] args) {
		show();
		show_byte();
		show_char();
	}
	private static void show() {
		String s = new String("一二三四");
		String s2 = "在我心中,豪哥最帅";
		System.out.println(s == s2);//false
	}
	private static void show_char() {
		char[] arr = {'一','二','三','四'};
		String s = new String(arr);
		System.out.println(s);
		String s2 = new String(arr,1,3);//从1位置开始,3个长度的元素转为字符串,包含1位置的元素
		System.out.println(s2);
	}
	private static void show_byte() {
		byte[] arr = {65,66,67,68,69};
		String s = new String(arr);
		System.out.println("{65,66,67,68,69}是"+s);
		String s2 = new String(arr,2,2);
		System.out.println(s2);//CD
	}
}

在这里插入图片描述

String判断相关的方法

  1. equals(Object obj): 判断两个字符串是否相等,(比较的是内容值,不是地址)

  2. equalsIgnoreCase(String otherStr):不区分大小写比较两个字符串的内容(常用于验证码比较)

  3. contains(String str) 判断一个字符串是否包含某个字符串

  4. startWith(String str) 判断一个字符串是否以指定前缀开头

  5. endWith(String str) 判断是否以指定后缀结尾

  6. IspEmpty() 判断一个字符串是否为空

package Test2;

public class Tt {
	public static void main(String[] args) {
		String s1 = "https://www.baidu.com";//判断是否 以http://开头
		System.out.println(s1.startsWith("https://www"));//true
		String s2 = "我是学生";//判断是否以 学生 后缀结尾
		System.out.println(s2.endsWith("学生"));//true
		String s3 = "";//判断是否是空字符串
		System.out.println(s3.isEmpty());//true
		String s4 = "利物浦是冠军";//判断是否包含 利物浦
		System.out.println(s4.concat("利物浦"));
		String s5 = new String("111");
		String s6 = "111";
		System.out.println(s5 == s6);//比较的是地址 false
		System.out.println(s5.equals(s6));//比较的是内容 true
		String s7 = "abc";
		String s8 = "ABc";
		System.out.println(s7.equalsIgnoreCase(s8));//忽略大小写进行比较  true
	}
}

String类型中关于获取的方法

  • length() 获取字符串长度

  • charAt(int index) 获取字符串中指定位置的某个字符

  • subString(int beginindex) 获取字符的某个子串,从指定位置开始,获取后面的所有的字符串包含指定位置的元素

  • subString(int beginindex,int endIndex) 获取字符的某个子串,从指定位置开始,到指定位置结束,含头不含尾

  • indexOf家族

(1) indexOf(int ch): 返回ch字符在当前字符串中第一次出现的位置

(2) indexOf(int ch, int fromindex):返回指定fromindex向后第一次出现ch字符的位置

(3) indexOf(String ch): 返回ch字符串在当前字符串中第一次出现的位置

(4) indexOf(String ch, int fromindex):返回指定fromindex向后第一次出现ch字符串的位置

package Test2;

public class Tt {
	public static void main(String[] args) {
		String s1 = "利物浦是冠军,欧洲的冠军";
		int ind = s1.indexOf("冠军");
		System.out.println(ind);//4
		int ind1 = s1.indexOf("冠军",6);//从6左边后 出现的下标位
		System.out.println(ind1);//10
		//获取字符同理,这里偷懒不写了
		String str = s1.substring(3);//获取下标3后的所有内容   是冠军,欧洲的冠军
		System.out.println(str);//是冠军,欧洲的冠军
		String str2 = s1.substring(3,6);//获取下标3-下标6后的所有内容  不包括6,含头不含尾
		System.out.println(str2);//是冠军
		System.out.println(s1.length());//12   下标范围 0 ~ length() -1
		char c = s1.charAt(2);//获取下标2的字符串
		System.out.println(c);//浦
	}
}

String类型转换相关的方法

  • byte[] getBytes() 将当前字符串,转为byte数组

  • char[] toCharArray() 将当前字符串转为char数组

  • String toUpperCase() 将字符串变为大写

  • String toLowerCase() 转为小写

  • concat(String s) 字符串拼接,是一个指定字符串和调用此方法的字符串拼接到一起,一般使用+拼接

  • valueOf() 可以将任意数据类型转为字符串对象 一般 使用 +”” 静态方法

package Test2;

public class Tt {
	public static void main(String[] args) {
		int a = 100;
		boolean b = true;
		String s1 = String.valueOf(b);//可以将任意数据类型转为字符串对
		System.out.println(s1);//true
		String s2 = a+"";//+"" 这个更简单和常用
		System.out.println(s2);
		
		String str1 = "莫雷诺";
		String str2 = "天下无敌";
		String str3 = str1.concat(str2);
		System.out.println(str3);//莫雷诺天下无敌
		String str4 = str1+str2;
		System.out.println(str4);//+拼接 这个更简单和常用   莫雷诺天下无敌
		
		String str5 = "hhh";
		System.out.println(str5.toUpperCase());//全部转为大写  HHH
		String str6 = "AAA";
		System.out.println(str6.toLowerCase());//全部转为小写  aaa
		
		String s = "莫雷诺天下无敌";
		char[] arr = s.toCharArray();
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]);//遍历输出 莫雷诺天下无敌
		}
		byte[] bytes = s.getBytes();//byte数组也一样遍历输出,这里也不多写了
	}
}

Math

数学运算的一个工具类,还提供了一些常用的字段

  • abs(int a) : 返回a的绝对值

  • ceil(double d): 返回d的向上取整

  • round(double d):返回d的四舍五入

  • min(int a,int b):

  • random() 返回一个大于等于0.0 小于1.0的随机数

  • pow(double a,double b) a的b次幂

  • cbrt(double d):d的立方根

  • sqrt(double d):d 的正平方根

package Test2;

public class Tt {
	public static void main(String[] args) {
		System.out.println(Math.abs(-10));//返回绝对值 10
		System.out.println(Math.cbrt(-8));//返回立方根 -2.0
		System.out.println(Math.sqrt(64));//返回正的平方根 8.0
		System.out.println(Math.ceil(10.34));//向上取整 11.0
		System.out.println(Math.ceil(-10.34));//向上取整注意正负 -10.0 

		System.out.println(Math.floor(10.34));//向下取整 10.0
		System.out.println(Math.floor(-10.34));//-11.0
		System.out.println(Math.max(11, 1));//取最大值 11
		System.out.println(Math.min(11, 1));//取最小值 1
		System.out.println(Math.pow(2, 3));//2的三次幂  8.0
		System.out.println(Math.round(5.5));//四舍五入 6
		System.out.println(Math.round(5.2));//四舍五入 5
	}
}

System

用于描述系统资源的类,该类的属性和方法都是静态的,所以不能创建对象实例化

常用的字段

(1) System.in:标准输入流,默认关联到键盘设备

(2) System.out:标准输出流,默认输出到控制台

(3) System.err:标准错误输出流,默认输出到控制台,用于打印错误信息,在eclipse打出字体是红色的

常用的方法

(1) exit(int status):用于结束虚拟机

(2) gc() 手动强制执行垃圾回收机制

(3) currentTimeMillies():返回当前的时间,以毫秒为单位,可以用来测试程序的性能,时间是从1970年1月1日00分00秒到此时此刻的毫秒值,开始获取一次,结束获取一次最后计算差值

package Test2;

public class Tt {
	public static void main(String[] args) {
		System.err.println("打印红色错误信息");
		System.out.println(System.currentTimeMillis());//当前时间距离1970年1月1日00时00分的毫秒值
		new Person1();
		System.gc();//手动强制执行垃圾回收机制
		System.out.println("-----------------");
		System.exit(0);//到这虚拟机就结束了,不会再执行其他内容了
		System.out.println("+++++++++++++++++");
	}
}
class Person1{
	@Override
	protected void finalize() throws Throwable {//垃圾回收机制一定会走的方法
		super.finalize();
		System.out.println("aaaaaaa");//被回收前执行
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值