1. API的概念
应用程序编程接口:每一个技术官方都会定义出许多的功能开发人员可以直接拿
来使用(拿来主义). API可以理解为Sun公司已经开发好的类和方法. API文档就是我
们开发的帮手
Object类:所有类的父类-切类都I接或者是间接继承Object. Object类中的所有
功能子类都可以使用.福利:
class xx {} //自己的构造方法,继承下来11个方法
Object类定义在了java.lang包lang包是核心包,此包中的任何类在使用的时候不需
要import导入
I
2.1 Object类的本地方法
本地方法:方法的定义上使用关键字,是修饰符native ,这个方法就是本地方法.
本地方法的特点:
●方法没有方法体
●方法是C++语言编写的,Sun公司不开源
●方法运行的时候是一一个独立的内存(本地方法栈)
●作用:凡是遇到本地方法方法的作用是和本机的操作系统交互的
2.2 Object类的方法toStirng()
自己定义类Person类,默认的继承0bject,Object类定义定义了方法:
public string tostring(
输出语句中System.out.println(对象)调用对象的toString()
System.out.printIn(对象) == System.out.println(对象.toString0)
toString方法的结果,和开发没有任何的关系.我们需要的是重写父类的方法
toStirng(,建立我们对象自己的字符串表现形式
package com.sdjzu.object01;
/*
* Preson类
* 任何类都会继承Object类
* */
public class Person {
}
package com.sdjzu.object01;
public class PresonTest {
public static void main(String[] args) {
Person p1 = new Person();
System.out.println(p1);
//调用object中的toString方法
System.out.println(p1.toString());
}
}
I
2.2.1重写父类的方法toString()
package com.sdjzu.object01;
/*
* Preson类
* 任何类都会继承Object类
* */
public class Person {
public String name;
public String number;
public Person(){
}
public Person(String name,String number){
this.name=name;
this.number=number;
}
//重写toString方法
//重写toString的方法的原因是:返回类的属性值
public String toString(){
return name+"::"+number;
}
}
package com.sdjzu.object01;
/*
* 测试类、
* */
public class PresonTest {
public static void main(String[] args) {
Person p1 = new Person("张三","001");
System.out.println(p1);
//调用object中的toString方法
System.out.println(p1.toString());
}
}
2.3 Object类的方法equals()
Java技术认为任何对象都具备比较性Object类定义了方法equals0.作用就是用来
比较对象的.方法结果是boolean值对象相等就是true
●引用数据类型==就是比较对象的地址是不是相同的
●Object类的方法 equals默认比较对象的内存地址(没有可比性)
I
package com.sdjzu.object01;
/*
* Preson类
* 任何类都会继承Object类
* */
public class Person {
public String name;
public int number;
public Person() {
}
public Person(String name, int number) {
this.name = name;
this.number = number;
}
//重写toString方法
//重写toString的方法的原因是:返回类的属性值
public String toString() {
return name + "::" + number;
}
//重写equals方法
//比较对象的number的年龄,相同返回true
public boolean equals(Object obj) {
//判断是否为空
if (obj==null){
return false;
}
//判断是不是自己
if (this == obj) {
return true;
}
//安全性的判断 :确定传入的对象是人
if (obj instanceof Person) {
//将obj向下转型,然后调用子类特有的属性
Person p = (Person) obj;
//比较两个人的年龄
return this.number == p.number;
}
return false;
}
}
package com.sdjzu.object01;
/*
* 测试类、
* */
public class PresonTest {
public static void main(String[] args) {
Person p1 = new Person("张三",56);
Person p2 = new Person("李四",56);
//Object类中的equals方法默认比较的是对象的地址值(无意义)
boolean equals = p1.equals(p2);
System.out.println(equals);
System.out.println(p1);
//调用object中的toString方法
System.out.println(p1.toString());
}
}
3. String字符串类
字符串对象程序中定义"“都是字符串对象,这个对象的使用频率最高.
字符串类java.lang.String类继承0bject类实现了三个接口.
程序中只要你写"里面任意"都是String类的对象,
I
字符串对象是常量,一-旦创建不能修改.
3.1字符串对象创建
public static void main(String[] args) {
//字符串创建,2个方式
//直接=创建
string s = “abc”;
//使用构造方法创建
String str = new String(“aa”);
I
}
●直接=创建方式代码少,书写简单,推荐使用
java
●new String()使用了构造方法的创建形式代码大,不推荐使用
3.2字符串常量的特性
package com.sdjzu.String1;
public class StringTest {
public static void main(String[] args) {
String a1="abc";
String a2=new String("abc");//new出一片新的空间
System.out.println(a1==a2);//false 地址值不一样
String a3="abc";
System.out.println(a1==a3);//true
String a4="hello";
String a5="word";
String a6="helloword";
/*
* a6==(a4+a5)a4和a5是变量,在javac编译的时候,不确定值,运行的时候jvm开辟新的内存空间
* */
System.out.println(a6==(a4+a5));//false
String a7=("hello"+"word");
/*
* 常量在编译的时候值式确定的
* 在运行的时候不会开辟新的空间
* */
System.out.println(a6==a7);//true
}
}
4String类
4.1String类的判断方法
package com.sdjzu.String1;
/*
* String类的判断方法
* */
public class StringTest {
public static void main(String[] args) {
String a1="abc";
String a2=new String("abc");//new出一片新的空间
System.out.println(a1==a2);//false 地址值不一样
String a3="abc";
System.out.println(a1==a3);//true
String a4="hello";
String a5="word";
String a6="helloword";
/*
* a6==(a4+a5)a4和a5是变量,在javac编译的时候,不确定值,运行的时候jvm开辟新的内存空间
* */
System.out.println(a6==(a4+a5));//false
String a7=("hello"+"word");
/*
* 常量在编译的时候值式确定的
* 在运行的时候不会开辟新的空间
* */
System.out.println(a6==a7);//true
}
}
4.2String类的获取方法
String类的获取方法,返回值不一 定
●int length0返回字符串长度字符串中字符的个数
●char charAtint index)返回指定索引上的单个字符
●int indexOf(String str)返回指定的字符串,在当前字符串中第一-次出现的索引
.I
●int lastlndexOfString str)返回指定的字符串,在当前字符串中最后- -次出现的
索引
●String substring(int start,int end)截取字符串,参数表示开始索引和结束索引,包
含开头索引,不包含结束索引
package com.sdjzu.String1;
/*
* String 类的返回方法
* */
public class StringTest1 {
public static void main(String[] args) {
StringMethod();
}
public static void StringMethod() {
//int length0返回字符串长度字符串中字符的个数
String c = "akjshdfl";
int k = c.length();
System.out.println(c.length());
//char charAt(int index)返回指定索引上的单个字符
String c2="sjdhkajhv;a";
char c22=c2.charAt(7);
System.out.println(c22);
//int indexOf(String str)返回指定的字符串,在当前字符串中第一-次出现的索引
int c3="alkujdvfkadjf".indexOf("d");
System.out.println(c3);//-1不是索引的值
//int lastlndexOfString str)返回指定的字符串,在当前字符串中最后- -次出现的
//索引
int c4="aalksuhfla".indexOf("a");
System.out.println(c4);
//String substring(int start,int end)截取字符串,参数表示开始索引和结束索引,包
//含开头索引,不包含结束索引
String c5 = "akuhfkajdhlkajdhvlkj".substring(4,7);
System.out.println(c5);
}
}
结果:
4.3String类的比较方法
int compareTo(String str)字符串之间的比较,谁大谁小,按照字典顺序(自然顺序)
abcde顺序
4.4String类的方法 去空格,替换,切割
●String trim()去掉字符串两边空格,中间空格不去掉
●String replace(String oldString,String newString)替换字符串
●StringO splt(“规则字符串”)对字符串进行切割
4.5正则表达式
●字符类:
o| [abc] 字符串的这个位置只能是abc
。[^abc] 字符串的这个位置不能是abc
。[a-zA-Z] 字符串的这个位置必须是字母,52个
。[Aa-zA-Z] 字符串的这个位置必须不能是字母,52个
●数字类:
[0-9]字符串的这个位置只能是数字
。[^0-9] 字符串的这个位置不能是数字
。[\d]等同于[0-9]
。[\D]等同于[^0-9]
●预定义字符:
。. 匹配所有的字符
。| [\d]等同于| [0-9]
。| [\D]等同于| [^0-9]
。| [\w] 文字字符,包含数字,字母,下划线[a-ZA-Z0-9_ ]
。| [\W]文字字符,包含数字,字母,下划线[^a-ZA-Z0-9 ]
●数量词:
。X{m} X这个字符只能出现m次a{3}
。X{m,} X这个字符至少出现m次
。X{m,n} X这个字符至少出现m次,不超过n次
。X? X这个字符出现-次,或者一 次也没有
。X* X这个字符出现零次或者多次
。X+ X这个字符出现至少-次
package com.sdjzu.String1;
public class StringTest3 {
public static void main(String[] args) {
Method();
}
public static void Method(){
/**
*正则表达式检查手机号是否合法
*开头必须是1, 长度固定11
*第二位3456789
*第三位必须是都是数字
*/
String str="13587836538";
String regex="1[3456789][0-9]{9}";
boolean matches = str.matches(regex);
System.out.println(matches);
}
}
4. StringBuilder
StringBuilder是字符串对象的缓冲区对象缓)冲区(出现目的,为了高效)提供String
类的效率.
String str = “a”; //字符数组
string str2 = “b”;//字符数组
String str3 = str + str2;//字符数组
4.1 StringBuilder类的实现原理
-个可变的字符序列,字符序列就是字符数组
string类中: private fina1 char[] value;
StringBuilder : char[] value;
I
字符序列是数组,Java数组的是定长的一旦创建,长度固定!
字符序列是数组,Java数组的是定长的,一旦创建,长度固定!
创建对象的时候,StringBuilder中的数组的初始化长度为16个字符
StringBuilder自动的进行数组的扩容,新数组实现,原来数组的中元素复制到新的数
组.
|结论 :无论怎么做字符串的操作, StringBuilder内部永远只有一个数组
StringBuilder类是线程不安全的类,运行速度快,推荐使用StringBuilder
StringBuffer是线程安全的类运行速度慢,多线程的程序,使用
两个类的构造方法和其他的方法,一模-样.
1. StringBuilder类的常用方法
●XX append(任意类型)参数追加成字符串,无论参数写的是什么,变成字符串.相当
于是字符串里面的+运算
package com.sdjzu.StringBuilder1;
public class StringBuilderTest {
public static void main(String[] args) {
appendStringBuilder();
}
public static void appendStringBuilder(){
//创建lang包下面的StringBuilder类的对象
StringBuilder str= new StringBuilder();
//用对象调用StringBuilder类中的append字符串追加方法
str.append(67);
str.append("aufhjaerhf");
str.append(56.545);
System.out.println("str = " + str);
}
}
。
方法调用链,链式编程(省力,少敲代码)
链式编程:保证-一个方法的返回值是一个对象,再使用这 个对象调用的调用方
法:对象.方法() .方法(0).方法()…
//代码调用lian
str.append("aukydsgfkua").append(78);
●StringBuilder insert(int索引任意类型)可以将任意类型的参数插入到字符串
缓冲区,指定索引
public static void insertStringBuilder(){
/*
* StringBuilder类中的insert方法
* 插入方法就是在指定的索引上插入任意元素
* */
//创建一个StringBuilder类对象
StringBuilder strInsert=new StringBuilder();
//使用append追加字符串
strInsert.append("aiuhfla");
strInsert.insert(5,"uaygf");
System.out.println("strInsert = " + strInsert);
}
StringBuilder类的其它方法
。int length0)返回字符串缓冲区的长度
。StringBuilder delete(int start,int end)删除缓冲区中的字符包含开头索引不
包含结束索引
。void setCharAt(int索引.char ch)修改指定元素上的字符
。StringBuilder reverse()翻转字符串
public static void otherStringBuilder(){
/*
* StringBuilder类的其他方法
* */
//创建一个StringBuilder类的对象
StringBuilder strOther = new StringBuilder();
//调用追加字符串的方法
strOther.append("ajgfjahyfbkuyf").append(7346);
//返回字符串的长度
int length = strOther.length();
System.out.println("length = " + length);
System.out.println("strOther = " + strOther);
//删除
strOther.delete(4,8);
System.out.println("strOther = " + strOther+"删除后");
//修改
strOther.setCharAt(1,'D');
System.out.println("strOther = " + strOther+"修改后");
//翻转zfc
strOther.reverse();
System.out.println("strOther = " + strOther+"反转后");
}
1.1 StringBuilder对象和String对象的互转
●String对象转成StringBuilder对象 String -> StringBuilder
。StringBuilder类的构造方法 StringBuilder(String str)
。append方法append(String str)