#什么是API
API(应用程序接口)是一些别人写好的一些预先定义的函数,让我们去用
##常见API:
1)Java.util包是java中的工具包,包含各种实用工具类/集合类/日期时间工具等各种常用工具包
import java.util.Scanner;
import java.util.Arrays;
2)java.lang包是java的核心,包含了java基础类
包括基本Object类/String类/Class类/基本数学类等最基本的类,这个包无需导入,默认会自动导入
import java.lang.Object;
import java.lang.String;
import java.lang.StringBuilder/StringBuffer;
正则表达式
包装类等等 –
#顶级父类java.lang.Object
##什么是Object类
Object是Java中所有类的超类,Java中的类都直接或者间接的继承自Object
如果一个类没有明确的指定父类,那么这个类默认继承Object
java.lang包是Java的核心包,无需导包,会自动导入
##Object类常用方法:
1、hashCode()
2、toString()
3、equals()
hashCode():
默认实现:根据对象的地址值生成一个唯一的int类型的哈希码值
重写后:根据对象传入的属性值生成哈希码值
只要两个哈希码值/int值不一样,就说明是两个对象;
两个对象如果hashCode值相同,则两个对象可能相同(有可能两个不相等的对象有相同的hashcode)
toString:
默认实现:打印对象的【类名@十六进制的哈希码】地址值
重写后: 对于自定义的类 打印对象的 类型 + 属性 +属性值
对于String类,会自动重写toString() 打印的是字符串的具体内容
equals:
默认实现:比较两个对象的地址值,默认使用==比较
重写后:对于自定义的类 比较两个对象的类型+属性+属性值
对于String类,会自动重写equals() 比较的是两个字符串的具体内容
###==和equals的区别
* ==比较的是左右两边的值,
1)如果左右两边是(八大)基本类型,比较的是字面值
比如1和1,3.4和3.4 1 == 1、 3.4 == 3.4
2)如果左右两边是引用类型,比较的是引用类型变量保存的地址值
直接写打印语句so(s2.equals(s3)); 比较的是s2和s3的地址值,因为没重写,结果为false
###在JS中==和===的区别
#String类
##String 类概述:
String是一个底层封装char[]数组的 对象,字符串不可变
###为什么字符串不可变(面试)
通过底层实现可以看出:String类被final修饰,是常量;不可以被继承
##String类常用API 长大小前后下标
###面试题
java 怎样从一个string字符串中判断某个字母出现多少次
错误示例:for循环里面的变量是下标,必须从0开始到s.length()-1结束
从头到尾循环
判断相等,自增
例如判断a
int cout=0;
String s=new String("abcdefaaabc");
for(int i=1;i<s.length();i++){
if(s.charAt(i)=='a')
cout++;就这样就可以了
}
如果不要判断大小写。s.toLowerCase()全变了再判断
//正确示例
public class Test {
public static void main(String[] args) {
sum();
}
public static void sum() {
int count = 0;
String s = "ababbababbabababbabab";
for (int i = 0; i<=s.length()-1; i++){
if (s.charAt(i) == 'a') {
count++;
}
}
System.out.println(count);
}
}
如何在Java中反转字符串? 面试 //反转字符串程序字符串的反转,如:输入abc,输出cba
字符串操作:如何实现字符串的反转及替换?:可用字符串构造一StringBuffer 对象,然后调用StringBuffer 中的reverse方法即可实现字符串的反转,调用replace 方法即可实现字符串的替换。
如何实现字符串的反转及替换?_一个傻子程序媛的博客-CSDN博客_如何实现字符串的反转及替换
##java.lang.StringBuilder、StringBuffer-字符串拼接 安率源用
##String的衍生 数据的校验:正则表达式
###简述正则表达式及其用途
在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要。
正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本
规则的代码。
用途:
正则表达式概述:正则速学速查
正则表达式操作的都是String类型的数据
可以校验数据,看看用户输入的数据是不是我们规定的格式的数据
常用来判断用户输入的内容是否符合格式的要求,注意是严格区分大小写的。
假如输入的不是正确的账号,就不进行提交了
String提供的正则表达式方法
Matches(正则)匹配的意思 : 判断当前字符串能否匹配正则表达式
例:if (input.matches(regex)) {//如果身份证号正确
System.out.println("恭喜你!输入正确!");
replaceAll(正则,子串) : 替换子串
split(正则) : 拆分字符串
一般不用自己写:需要什么正则表达式直接百度即可,网上别人已经写好了,只需要稍微看看正确不正确即可
#序列化和反序列化
##1. 序列化(如何实现):
将程序中对象的各项信息,序列化输出到文件中保存
方向是Out,使用的流是ObjectOutputStream
使用的方法是out.writeObject(目标对象);
注意:如果一个类的对象想要被序列化,那么这个类必须实现Serializable接口
###什么情况下需要序列化
1.当你想把的内存中的对象保存到一个文件中或者数据库中时候;
2.当你想用套接字在网络上传送对象的时候;
3.当你想通过RMI传输对象的时候;
##2. 反序列化(如何实现):
将之前输出到文件中的数据,读取回程序中,并把读到的数据重新恢复成对象
方向是in,使用的流是ObjectInputStream
使用的方法是in.readObject();
注意:反序列化指定的文件路径,必须与序列化输出的文件路径一样
注意:一次序列化操作对应一次反序列化操作,或者UID必须保持一致,如果不一致,会报错
#IO流 字节流 字符流
##输入流/输出流:
流(看是输入还是输出从程序角度看)
我们写的代码都存在java内存中
输出:idea软件内容存到文档
输入:别人给的文档里的东西在idea显示出来
##常见的流
面试 : 字符流和字节流的区别?并且他们的父类叫什么?