Java高级特性
属于面向对象的使用
使用的就是API(Application Programming Interface):应用程序接口文档
学习的就是Java中常用的核心类以及核心接口,---->Jdk提供的
Object类:
每个类都有Object作为超类--->父类的意思
所有的类都默认继承自Object
常用方法:
public final Class getClass() (重要):获取当前正在运行的Class类对象(字节码文件对象
public String getName():获取当前类或者接口的名称,字符串形式 包名.类名
public int hashCode():理解 "一个地址值"不是实际意义的地址值,它是经过底层的哈希算法(hash)算出来的
public String toString():返回对象的字符串表示形式,
public boolean equals(Object obj):比较对象是否相等,引用该类型比较的是地址值是否相同
==和equals的区别
==:如果连接都是两个基本数据类型:比如int 比较的是数据值是否相等,如果连接的是引用类型,那么比较的是地址值是否相同。
equals()是Object类的方法,如果我们不重写Object的equals方法,默认比较的是两个引用类型的地址值是否相同,如果重写了equals方法而且同时重写了hashCode()比较的是成员信息是否相同!
Scanner类
构造方法:
public boolean hasNextXXX(){} XXX就对应的数据类型,判断下一个录入的数据是否为XXX类型
boolean hasNextInt() :判断是否下一个录入的是int类型
boolean hasNextLine(); 判断是否下一个录入的是String类型 int nextInt() {} 录入的是int类型
String nextLine(){} 录入的是String类型
先录入的String,在录入int,没问题
先录入int,在录入String,有问题
String类:(重点类)
//String中“==”与"equals"区别: public class StringTest { public static void main(String[] args) { String s1="hello"; String s2="world"; String s3="helloworld"; String s4="helloworld"; String s5 = new String("hello") ; System.out.println(s3==(s1+s2));//false System.out.println(s3==s4);//true System.out.println(s3.equals(s1+s2));//false System.out.println(s3=="hello"+"world");//false System.out.println(s3.equals("hello"+"world"));//false System.out.println(s1==s2);//false System.out.println(s1.equals(s2)) ;//true } }
String常用的判断功能
public boolean contains(String序列 s):字符串中是否包含指定的字符
public boolean endsWith(String suffix):是否以指定的字符串结尾
public boolean startsWith(String prefix):是否以指定的字符串开头
public boolean isEmpty()判断字符串内容是否空字符,长度为0,就是true
public boolean equals(Object anObject)-->重写Object,区分大小写判断字符串内容是否相同
public boolean equals(Object anObject):不区分大小写判断字符串内容是否相同
public class StringDemo2 { public static void main(String[] args) { String s="helloworldmanlovemystyle"; System.out.println(s.contains("dman")); System.out.println(s.endsWith("yle")); System.out.println(s.startsWith("hell")); System.out.println(s.isEmpty()); } }
String类的获取功能(都必须掌握)
public char charAt(int index)获取指定索引出的字符值
public String concat(String str):拼接功能--->获取新的字符串,最传统的拼接使用+:字符串拼接符号 public int indexOf(int ch)返回指定字符第一次出现的字符串内的索引
public int indexOf(String str):返回指定字符串中子字符串第一次出现索引值
public int lastIndexOf(int ch):返回指定字符最后一次出现的索引
public int lastIndexOf(String str)
String substring(int beginIndex) :从指定位置开始默认截取到末尾--->返回一个新的字符串 String substring(int beginIndex, int endIndex) :从指定位置开始截取到指定位置结束
public String[] split(String regex):按照指定的分割符号--拆分成字符串数组
public class StringDemo2 { public static void main(String[] args) { String s="helloworldmen"; System.out.println(s.charAt(3)); System.out.println(s.concat("QQ")); System.out.println(s.indexOf("e")); System.out.println(s.lastIndexOf("e")); System.out.println(s.substring(5)); System.out.println(s.substring(0,8)); String str = "JavaEE-Python-Php-Go-R-Hadoop-C"; String[] strArray = str.split("-"); for (int i = 0; i <strArray.length ; i++) { System.out.println(strArray[i]); } } }
String类的转换功能:
public char[] toCharArray():将字符串转换为字符数组
public byte[] getBytes():将字符串转换成字节数组---使用平台默认字符集编码
String的构造方法---String(byte[] bytes):使用平台默认字符集解码
public String toLowerCase():将字符串转换成小写
public String toUpperCase():将字符串转换成大写
Arrays工具类:可以将任何数组---转换成String public static String toString(int[]/byte[]/double[]/float[]/Object[]等等 )
万能方法:将任何数据类型转换成String
public static String valueOf(int/double/float/char[]/Object i)
public String replace(char oldChar,char newChar)
将指定的字符使用新字符进行替换
public String replace(String oldStr,String newStr)
替换指定字符串
import java.util.Arrays; public class StringDemo { public static void main(String[] args) { String s = "好好学习天天向上" ; byte[] bytes = s.getBytes(); System.out.println(Arrays.toString(bytes)); String myStr = "今天老地方见" ; char[] chs = myStr.toCharArray(); for (int i = 0; i <chs.length ; i++) { System.out.println(chs[i]); } String result = String.valueOf(100); System.out.println(result); }
安装字典顺序比较
public int compareTo(String anotherString)
StringBuffer:字符串缓冲区--->里面都存储的可变的字符序列
构造方法
StringBuffer() 空参构造
StringBuffer(String str):有参构造
获取功能:
int length():获取字符串缓冲区的长度(里面实际的字符序列的长度)
public int capacity():获取缓冲区的容量大小
添加功能
public StringBuffer append(任何类型数据) :追加功能 (常用的),返回值是字符串缓冲区本身,在缓冲区中的默认的字符序列后面依次追加。
public StringBuffer insert(int offset,char c/String str):返回值是字符串缓冲区本身,在指定的位置插入指定的字符或者字符串。
public StringBuffer deleteCharAt(int index):删除指定索引处的字符,返回字符串缓冲区本身
public StringBuffer delete(int start,int end):删除从执行位置开始到指定位置的字符序列,不包括end位置,是end-1处,返回字符串缓冲区本身
public class StringBufferDemo { public static void main(String[] args) { StringBuffer sb = new StringBuffer() ; sb.append(12); sb.append("q"); sb.append("wert"); System.out.println(sb); sb.insert(3,"插入"); System.out.println(sb); System.out.println(sb.deleteCharAt(2)); System.out.println(sb.delete(4,7)); } }
StringBuffer的反转功能:
StringBuffer reverse() 返回字符串缓冲区本身
截取功能和String类型的截取功能一样,
String subString(int beginIndex):从指定位置默认截取到末尾--->String
String subString(int beginIndex,int endIndex)--->从指定开始,截取到指定位置结束endIndex-1出,返回的新的字符串
StringBuffer和StringBuilder有什么区别?
共同点:就是具有相互兼容的API(StringBuffer能用的StringBuilder也可以) 都是支持可变的字符序列,不断在字符串缓冲区进行追加字符! 不同点: StringBuffer线程安全的类--->同步操作--->执行效率低 StringBuilder线程不安全的类---不同步的操作--->执行效率高
//String--->StringBuffer String s = "hello" ; //1)StringBuffer的无参构造方法+append(String str) StringBuffer sb = new StringBuffer(); sb.append(s) ; //2)StringBuffer的有参构造方法StringBuffer(String s) StringBuffer sb2 = new StringBuffer(s) ; //StringBuffer--->String StringBuffer buffer = new StringBuffer("JavaEE") ; //1)String的构造方法String(StringBuffer sb) String s = new String(buffer) ; //2)StringBuffer的toString()方法 String s2 = buffer.toString() ;
Integer类---包含int类型的值
byte --- Byte
short--- Short
int --- Integer
long --- Long
float--- Float
double --- Double
char --- Character
boolean --- Boolean
Integer类的有些成员变量
public static final int MAX_VALUE ;自定义常量
public static final int MIN_VALUE ;
静态方法
public static String toBinaryString(int i):将十进制数据--->二进制数据的字符串形式
public static String toOctalString(int i):将十进制数据--->八进制字符串形式
public static String toHexString(int i):将十进制数据---->十六进制数据的字符串形式
Integer的构造方法
Integer(int value)--->可以将基本类型数据--->Integer
Integer(String s)throws NumberFormatException :将String--->Integer
形式参数必须为"数字字符串",否则如果不是数字字符串--->NumberFormatException出现数字格式化异常
public class IntegerDemo2 { public static void main(String[] args) { //Integer(int value)--->可以将基本类型数据--->Integer Integer i = new Integer(100) ; //它和Integer i = 100 ;//不一样 // Integer ii = 100 ;//左边是Integer引用类型 右边:基本类型100 // 底层执行的public static Integer valueOf(int i) System.out.println(i); System.out.println("-------------------------------") ; //Integer(String s)throws NumberFormatException Integer integer = new Integer("20") ;//数字字符串 System.out.println(integer); //20 } }
1.String和int之间的相互转换 int--->String 1)使用字符串拼接符号+ 拼接空字符串"" 2)通过int---->Integer的构造方法 Integer(int i) Integer的成员方法public String toString() 3)直接就通过Integer的静态功能 public static String toString(int i) String ---> int :直接转换(推荐的方式) Integer 1)静态功能public static int parseInt(String str) 2)String--->Integer--->int Integer的构造方法:Integer(String s):s必须为数字字符串,否则出现NumberFormatException Integer的成员方法 int intValue()
Date类
public Date(long date):是字符串日期的文本格式
//Date--->String public static String date2String(Date date,String pattern){ //一步走 return new SimpleDateFormat(pattern).format(date) ; } //String---Date public static Date string2Date(String source,String pattern) throws ParseException { return new SimpleDateFormat(pattern).parse(source) ; }
public class DateDemo { public static void main(String[] args) throws ParseException { Scanner sc=new Scanner(System.in); System.out.println("输入你出生日期"); String s=sc.nextLine(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd"); Date date=sdf.parse(s); Long l=date. getTime(); long day=l/86400000; System.out.println("你来到这个世界"+day+"天"); } }
Character:char类型保证类型
构造方法
Character(char value) 包含 char类型的值
Character类有三个判断判断经常用到
public static boolean isDigit(char ch):是否数字字符
public static boolean isLowerCase(char ch):是否为小写字母字符
public static boolean isUpperCase(char ch):是否为大写字母字符