文章目录

  • API应用程序编程接口
  • 前述
  • API
  • 类库
  • jar包
  • 类型库
  • Object类
  • 概述
  • 方法
  • 构造方法,略
  • 【成员方法】
  • equals()
  • toString()
  • Scanner类
  • 概述
  • 构造方法
  • 成员方法
  • 1)录入基本数据类型
  • 注意
  • 2)录入字符串类型
  • 连续录入两次数据时,可能存在的问题
  • String类
  • 【注意】
  • 构造方法
  • String的成员方法
  • String类型的判断
  • String类型的获取
  • String类型的转换
  • String类型的其他方法
  • String总结
  • Math类
  • 概述
  • 常量
  • 静态方法
  • System类
  • 概述
  • 常量
  • 静态方法
  • StringBuilder类
  • 概述
  • 定义
  • String和StringBuilder区别
  • 方法
  • 1、构造方法
  • 2、成员方法
  • StringBuffer
  • StringBuilder和StringBuffer
  • 基本类型的包装类
  • Integer类
  • 概述
  • 方法
  • 构造方法,略
  • 成员方法
  • 非静态成员方法,略
  • 静态成员方法
  • 常量
  • 装箱和拆箱
  • 装箱、拆箱
  • 自动装箱、拆箱,强大
  • 正则表达式


API应用程序编程接口

前述

API

API
    Application Programming Interface,应用程序编程接口,不是Api帮助文档。

解释:
    接口,理应该只有方法的申明
    但是,API包含了具体的实现方法
    不过,只需要知晓有哪些接口,如何调用即可,不需要知道具体的实现过程

废话:jdk自带基础api,扩展的需要自己下载

类库

1.什么是类库?
    Java源文件编译后生成的.class字节码文件中包含源码的所有信息,单独在其他地方也是可以运行的。把一系列.class放在一起采用Java特殊的打包方式打成压缩包(jar包),这个压缩包——类库

jar包

1.什么是jar包?
一系列.class文件打成的压缩包。
2.使用eclipse如何手动生成jar包?
选择文件——鼠标右键export——java——jar file——设置路径
3.jar包如何使用?
将下载好的jar包,copy到当前项目中,选中jar包——鼠标右键bulid path——add to Bulid path
4.如何删除jar包?
选中该jar包——鼠标右键——bulid path——configure build path——libraries——remove

类型库

1.什么是类型库?
一系列的jar包,组成一个类型库——libraries
2.如何添加libraries?
当前项目鼠标右键——build path——add libraries——选择类型库文件

Object类

概述

1)是所有类(包括自定义的类)的顶层父类,类层次结构的根。
2)所有的类型,都是Object的子类。八种基本类型对应八种基本包装类型,包装类型包含于object
3)所有的类型,都应该拥有Object类中定义的方法和属性
4、数组也是Object类的子类。比如:Person[]本身与Object没有什么继承关系,但都是Object的子类,甚至Object[]都是Object的子类

方法

因为所有类型都是Object的子类,所以所有类型都可以使用Object中定义的私有方法

构造方法,略

由于所有类都与Object存在继承关系,那么子类在运行时都一定会一路向上访问父类的构造方法,最终都会访问顶层Object中的构造方法:Object()

Object obj = new Object();
	System.out.println(obj);//java.lang.Object@4b67cf4d

解释:
java.lang.Object是当前运行时类
@:分隔符,没有实际意义
4b67cf4d:关于地址的哈希码值的十六进制

【成员方法】

都可以使用快捷键自动生成。
alt + shift + s h:equals()
alt + shift + s s:toString()

equals()

比较

声明
	boolean equals(Object obj)
功能
	用于比较调用者和参数obj是否“相等”。
	1)如果是比较基本数据类型,就直接比较值
	2)如果是引用类型
 		1、在Object中是比较两个引用是否记录相同地址,即是否指向相同对象。
 		2、在实际应用中,需要比较值是否相等而不是比较地址,所有并没有太大的作用,需要重写

比如比较两个Person对象存储的内容是否相同

@Override
	public boolean equals(Object obj) {
		if (this == obj)//判断是否是同一个对象
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())//判断是否是同一类对象
			return false;
		Person other = (Person) obj;//如果不是同一个对象,且是同一类对象。将Object类向下转型,从而比较值
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))//id都不为空,就比较值是否相等
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))//name都不为空,就比较值是否相等
			return false;
		return true;
	}
toString()

打印、展示

声明
	String toString()
作用
 	可以返回调用者对象的字符串表示:使用字符串将该对象的所有信息都展示出来。默认存在,可以省略。
说明
	1)在Object类中的实现:简称为对象的“地址”,将该对象的运行时类的全类名 + @ + 哈希码值的十六进制表示形式。
	2)我们用于打印展示自定义类中的属性值,所以需要重写。在其他类中,已经重写好了,只需要给自定义类重写即可。

为什么在平时使用print或者println方法时,没有加toString(),也可以得到字符串。换言之为何可以省略toString() ?
	👇👇👇

java 应用对外提供接口 java应用程序接口_字符串

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

Scanner类

概述

1)Scanner就是一个扫描器,可以扫描构造方法参数中指定内容、设备上的基本数据类型和字符串。
2)实际开发没什么作用。

构造方法

①Scanner( File f )——》扫描指定文件对象

②Scanner( String path )——》扫描指定的路径

③Scanner( InputStream is ) ——》扫描指定的输入流
    1)Scanner(System.in)中的System.in就是一个标准输入流,默认关联到键盘
④Scanner(String source)——》 扫描字符串

//录入数据,就是在扫描键盘流
	private static void test_扫描键盘流() {
		InputStream is = System.in;
//		System.out.println(is.read());
		Scanner sc = new Scanner(is);
		
		System.out.println(sc.nextInt());
		System.out.println(sc.next());
	}

	private static void test_扫描文件() throws FileNotFoundException {
		File f = new File("test.txt");
		Scanner sc = new Scanner(f);
		while(sc.hasNextLine()) {//是否有下一行
			System.out.println(sc.nextLine());//读取下一行
		}
	}

	private static void test_扫描字符串() {
		Scanner sc = new Scanner("123 234");
		int num1 = sc.nextInt();
		System.out.println(num1 + 1);
		
		int num2 = sc.nextInt();
		System.out.println(num2 - 1);
	}
成员方法
1)录入基本数据类型

nextByte()
nextShort()
nextInt()
nextLong()
nextFloat()
nextDouble()
nextBoolean()

注意

1)没有nextChar()
2)键盘录入的就是实际数字,所以Float和Long不需要在后加F、L
3)录入基本数据类型的成员方法都是以空格、换行为结束符,所以可以以空格隔开,实现连续录入

2)录入字符串类型

next()——》录入字符串,以空格为结束符
nextLine()——》录入字符串,以换行符为结束符,可用于读取下一行。

连续录入两次数据时,可能存在的问题

描述:
1)第一次录入基本数据类型的数据,它可以以空格、换行为结束符
2)第二次再录入字符串时,可能会把第一次的空格或者换行符读取下来

Scanner sc = new Scanner(System.in);
		System.out.println(sc.nextInt());
		System.out.println(sc.nextLine() + "9月5日");

结果

录入:
12345 abc
打印:
12345
 abc9月5日

解决:三种
①创建两个Scanner类,分别用于录入
②在录入第二行前用nextLine()把上一行的换行符和其余不要的信息读取调

Scanner sc = new Scanner(System.in);
		System.out.println(sc.nextInt());
		sc.nextLine();
		System.out.println(sc.nextLine());

③两次都用nextLine()录取数据,如果要获取其他类型数据,可通过转型(只是转型时,第一次录入的数据不应当包含多种类型),剪切,拼凑等

Scanner sc = new Scanner(System.in);
		String num = sc.nextLine();
		int a = Integer.parseInt(num);
		System.out.println(a);
		System.out.println(sc.nextLine());

String类

【注意】

1)字符串类型,属于java.lang包,不需要导包。可以将其中的方法直接拿来使用
2)字符串变量,指向的都是字符串常量,存储在常量池
3)所以,字符串变量指向的值不可改变,但是引用地址可以改变(可以重新指向新的常量)
4)不可变:因为String类型中只有构造方法,没有设置set方法

构造方法

将任意类型的数组转成字符串

1.String()——》创建一个空字符串
2.String(String original)——》copy一份
注意:常量放在常量池,但是构造函数创建的字符串是放在堆内存中的

//常量放在常量池
		String str1 = "abc";
		//对象放在堆内存
		String str2 = new String(str1);
		System.out.println(str1.equals(str2));//ture
		System.out.println(str1 == str2);//false

3.String(byte[] arg)——》字节数组转为字符串

byte[] arg = {65,66,67};
		String str = new String(arg);
		System.out.println(str);//ABC

Sttring(byte[] arg,int offset,int length)——》指定从哪开始转换,转换几个字节

byte[] arg = {65,66,67};
		String str = new String(arg , 0 , 2);
		System.out.println(str);//AB

4.String(char[] arg)——》字符 串成字符串

String(char[] arg , int offset,int length)——》从数组的第几个位置开始,将几个数据组成员串成字符串

char[] arg = {'a','b','c'};
		String str = new String(arg,0,3);
		System.out.println(str);//abc

String的成员方法

字符串是常量,如果要使用对字符串操作之后的字符串,需要手动保存

String类型的判断
1、boolean equals(Object obj)
  	比较两个字符串的字符序列是否完全一致
  	
  注意:	常量与变量存储的内容进行比较时,把常量放在前面
  String name = "abc";
  “abc”.equals(name);
  	
2、boolean equalsIgnoreCase(String other)
 	比较两个字符串忽略大小写是否完全一致
 	
3、boolean contains(String str)
 	判断调用者是否包含参数str
 	
4、boolean startsWith(String prefix)
 	判断调用者是否以参数开头
 	
5、boolean endsWith(String suffix)
 	判断调用者是否以参数结尾
 	
6、boolean isEmpty()
 	判断调用者是否为空
 	
 	注意
 		空格不算空串
String类型的获取
1、int length()
 	获取字符串的字符个数:可以获取到字符串的索引范围,就可以遍历字符串
 	
	使用
		数组获取长度,数组名称.length属性;字符串获取长度,字符串.length()方法
		
2、根据索引找内容
 	1、char charAt(int index)
 	 	根据参数指定的索引,返回对应位置的字符
 	2、String substring(int beginIndex)
 	 	根据传入的参数指定的索引,截取该索引之后的所有字符(包含beginIndex),形成一个新的字符串
 	3、String substring(int start, int end)
 	 	截取调用者从start开始,end结束的一段子串(包含start,不包含end,包含头,不包含尾)
 	 	
3、根据内容找索引
 	1、int indexOf(int ch)
 	 	返回指定字符c第一次出现的索引
 	 	
 	 	注意
 	 		虽然写的int ch,但是可以通过ASCⅡ表转化为字符
 	 		
 	2、int indexOf(int ch, int fromIndex)
 	 	从指定的fromIndex索引开始寻找,第一次出现字符c的索引
 	 	
		注意
			可以用于寻找ch字符下一次出现的索引,从当前索引加1开始寻找
		
 	3、int indexOf(String subStr)
 	 	返回调用者中,第一次出现子串subStr的索引(子串首字母的索引)
 	4、int indexOf(String subStr, int fromIndex)
 	 	返回调用者中,从fromIndex开始寻找,第一次出现subStr字符串的索引
 	 	
		注意
			可用于寻找下一次该subStr字符串出现的索引
			
 	5、lastIndexOf家族
 	 	同indexOf家族,只是从后往前找
String类型的转换
1、字符串转成其他的数据类型
 	1、byte[] getBytes()
 	 	将调用者字符串,转成字节数组,编码
 	2、char[] toCharArray()
 	 	将调用者字符串,转成字符数组
2、字符串转成其他的字符串形式
 	1、toUpperCase()
 	将调用者,变成全大写状态
 	2、toLowerCase()
 	将调用者,变成全小写状态
3、其他类型转成字符串,【静态方法】
	valueOf(),可以转换任意的数据类型,为字符串。也可以使用String的构造方法
	两种转换的方式:
	 	1、针对基本类型的转换,直接将值变成字符串,例如,123->”123”, 12.34->”12.34”
	 	2、针对引用类型的转换,直接调用对象的toString方法进行拼接
	 	
	 注意
		 valueOf()是String的静态方法,不要实例化
String类型的其他方法
1、String replace(String oldStr, String newStr)
 	将调用者中,oldStr子串,全部替换成新串newStr
 	
 	注意
	 	1)是删除全部旧串,出现几次删除几次
	 	2)可以用于删除指定字符串。用空格去替换指定字符串
	 	
2、String trim()
 	将调用者字符串中,两边的空白字符删除
 	空白字符:空格、制表符\t、换行符\n

String总结

String构造方法——》数组转字符串
静态方法ValueOf()——》基本类型、引用类型转字符串

Math类

概述

用于数学计算的一个工具类

常量
1、Math.E
 	自然对数的底数
2、Math.PI
 	圆周率
 	
 	注意
 		常量的使用:直接使用类名点常量名即可
静态方法

静态方法,使用时,直接使用类名点方法名即可

方法

用途

abs

计算绝对值

cbrt

计算立方根

sqrt

计算正平方根

ceil

向上取整

floor

向下取整

max

获取两个数字最大 值

min

获取两个数字最小值

pow(int a, int b)

计算a的b次幂

double random()

获取一个随机数,0.000~0.999

round

四舍五入

System.out.println(Math.abs(-123));
		
		System.out.println(Math.cbrt(8));
		
		System.out.println(Math.cbrt(-8));
		
		System.out.println(Math.sqrt(100));
		
		System.out.println(Math.ceil(12.34));

System类

概述

1、用于描述系统的一个类型,可以获取系统相关的一些信息
2、常用的一些字段,都是有关io流的
3、常用的方法,gc(),currentTimeMillis()

常量

1、System.in
系统的标准输入流,InputStream类型
默认关联到键盘上,所有的键盘录入,都需要使用System.in
可以通过多种方式,对该流加强,Scanner、转换流、缓冲流
2、System.out
系统的标准输出流,PrintStream类型,提供了很多的print和println方法
可以将数据直接当做字符串打印在控制台
3、System.err
1、系统的标准错误流,PrintStream类型,提供了很多print和println方法
2、用于在控制台输出一些错误信息
3、注意事项:
System.err的执行是另外一条线程执行的,打印的顺序和代码顺序不一致
在eclipse中,使用红色字体打印标准错误流的内容

public static void main(String[] args) {
	System.out.println(666);
	System.err.println(888);
}

静态方法

1、gc()
 	1、作用:加快垃圾回收的操作
 	2、注意事项:
 	 	1、不一定每次调用都会垃圾回收,但是只要调用,就会增加回收的概率
 	 	2、不建议频繁的调用该方法,否则会降低系统效率
 	 	3、不建议手动调用这个方法,因为jvm有很好的垃圾回收算法
2、long currentTimeMillis()
 	1、作用:返回当前系统时间的毫秒值
 	2、意义:1970年1月1日0时0分0秒到现在系统时间经过的毫秒值
 	3、用处:
 	 	1、可以通过Date、Calendar等类型,将时间表示成比较好看的形式
 	 	2、通过计算毫秒值的差值,来计算代码的执行时间
public static void main(String[] args) {
		for (int i = 1; i <= 530999; i++) {
			new Demo();
		}
		System.gc();
		
		long start = System.currentTimeMillis();
}

StringBuilder类

概述

定义

字符串生成器,字符串的缓冲区

String和StringBuilder区别

String和StringBuilder都是描述字符串的。
String:不可变的字符串(内容、长度都不可改变),常量。引用可以变,指向的值存储在常量池中,不可变
StringBuilder:可变的字符串(内容、长度都可以改变)

方法
1、构造方法

作用:
1)创建当前类型的对象
2)将其他类型,转变为StringBuilder类型
构造方法:
1)StringBuilder()——》创建一个生成器,初始容量为16个字符,作为缓冲区
2)StringBuilder(int Capacity)——》创建一个生成器,设置初始大小
3)StringBuilder(String str)——》创建一个生成器,初始值为str,大小为str.length()+16

2、成员方法

【待补充】

StringBuffer

StringBuilder和StringBuffer

相同:

  • 都是字符串的缓冲区、字符串的生成器、可变的字符序列

不同:

  • 1)StringBuffer——》jdk1.0;StringBuilder——.jdk1.5
  • 2)StringBuffer线程安全;StringBuilder线程不安全 PS:线程安全——多线程环境下仍然保证数据安全
  • 3)StringBuffer效率低;StringBuilder效率高

基本类型的包装类

1.八种基本数据类型,对应八种包装类。
2.基础使用时,不用区分基本数据类型,因为会自动装箱,自动拆箱
为什么要设置包装类?

Integer类

概述

八种基本数据类型不包含在Object类中,那么只能对数据进行简单的赋值,那么一些对数据的一些基本操作无法进行,所以将八种基本数据类型封装为包装类对象

方法
构造方法,略

Integer(int i)——》int转Integer对象。装箱
Integer(String str)——》String数字转Integer对象

成员方法
非静态成员方法,略

xxxValue()——》将Integer类型的对象,转变为其他基本数据类型,其实就是get方法。拆箱
eg:byteValue()

静态成员方法

1)其他进制转为10进制int(str按照指定进制解析为int)

  • parseInt(String str)——》str按照10进制转为int
  • parseInt(String str,int radix)——》str按照radix进制转为int

2)10进制转为其他进制(int转指定进制)

  • toBinaryString(int i)——》2进制转10进制
  • toOctalString(int i)——》8进制转10进制
  • toHexString(int i)——》16进制转10进制
  • toString(int i,int radix)——》指定radix进制转10进制

3)str按照指定进制解析封装为Integer

  • valueOf(String str,int radix)
常量

常量的调用:Integer.常量名

MAX_VALUE——》int表述范围的最大值
MIN_VALUE——》int表述范围的最小值
SIZE——》int类型在内存中的位数
TYPE——》int类型在方法区中的字节码对象,int.class

装箱和拆箱

jdk1.5之后

装箱、拆箱
  • 装箱:使用构造方法——》基本数据类型封装成包装类型的对象
  • 拆箱:xxxValue()——》包装类型对象,转变为基本数据类型
自动装箱、拆箱,强大
  • 自动装箱:基本数据类型给包装类对象赋值。eg:Integer integer = 123;
  • 自动拆箱:直接参与算数运算;包装类对象给基本数据类型赋值

故,不用区分基本数据类型和包装类对象



正则表达式







PS:

1)【】表示重点,删除线表示未解决

2)学习记录使用,如存在错误还望指正