API

一.Scanner类: 1、键盘录入的步骤: 1)需要创建键盘录入对象:Scanner sc =new Scanner(System.in); 2)导入包:import java.util.Scanenr; ctrl+shift+o 3)接收数据:XXX(类型) 变量名= sc(键盘录入对象).nextXXX(); Eg:int a = sc.nextInt(); 2.Scanner类的构造方法: Public Scanner(InputStream source){//以输入流的形式录入数据 //InputStream:字节输入流 InputStream in = System.in;//底层执行返回的是一个字节输入流(标准输入流) } 3.Scanner类中的一些常见方法: 1).在Scanner类中提供一个判断功能: Public boolean hasNextXXX();{//当前扫描器判断是否有下一个可以录入的XXX类型数据 nextXXX(); } Java.util.InputMismatchException:录入的数据和接收的数据类型不匹配异常 package org.westos.API;

import java.util.Scanner;//ctrl+Shift+o导包

public class APIDemo1 { public static void main (String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in); //录入对象 System.out.println("请输入一个数据:"); if(sc.hasNextInt()) { int num = sc.nextInt() ; System.out.println("num:"+num); }else { System.out.println("您输入的数据类型不匹配."); }

}

2).问题: 键盘录入两个int类型的数据,分别输出,没有问题; 键盘录入两个String类型的数据,分别输出:没有问题; 先录入一个String类型的数据,在录入int类型的数据,没有问题; 先录入一个int类型的数据,再录入String类型的数据,有问题。第二个数据是字符串类型,又由于录入下一个数据要"空格"本身是一个字符串。 b是空格,b的值没有录入! 如何解决:重写创建键盘录入对象 Eg:package org.westos.API;

import java.util.Scanner;

public class APIDemo { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in); //接收数据 System.out.println("请输入一个数据:"); int a = sc.nextInt(); System.out.println("num:"+a); //接收字符串

	//System.out.println("请输入一个字符串:");
	//String b = sc.nextLine();
	//System.out.println("String:"+b);
	
	
	//重新创建一个键盘录入对象
	System.out.println("请输入一个字符串:");
	Scanner sc2 = new Scanner(System.in);
	//接收字符串
	String b = sc2.nextLine();
	System.out.println("String:"+b);
	
	
}

} 二.Object类: 1.Object:是类层次结构的根类.每个类都使用 Object 作为超类(父类) 2.Object类中的一些方法: A).public int hashCode()返回该对象的哈希码值 . 把它理解地址值(不是实际意义的地址值) B).public final Class getClass()返回此 Object 的运行时类 Class类中有一个方法: C).public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。 返回值是Class(JavaSE最后一天:反射) public class ObjectDemo {

public static void main(String[] args) {
	
	//创建一个学生对象
	Student s1 = new Student() ;
	System.out.println(s1.hashCode());//118352462
	
	System.out.println("-------------------------");
	
	Class c1 = s1.getClass() ;//Object 的运行时类
	System.out.println(c1);//class org.wesots_01.Student :以Class形式表示的当前类
	String name = c1.getName() ;
	System.out.println(name);//以字符串显示当前的类:org.wesots_01.Student :全类名
	
	System.out.println("-------------------------");
	
	//链式编程
	String str = s1.getClass().getName() ;
	System.out.println(str);
	
}

} D).public String toString(); 返回该对象的字符串表示。 直接输出对象名称:实际执行了Object中的toString(),输出的全类名@十六进制数据 我现在输出对象名称,不想让toString()直接输出的是一个地址值(对象的地址值)

就需要重写Object中的toSring(),一般情况:自动生成即可 建议所有子类都重写此方法。 Integer:是int类型的包装类类型,它里面提供了一个方法 public static String toHexString(int i):以十六进制表示对字符串形式。 E).public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。 ==:比较的值相等(地址值) equals:本身属于Object类中的方法,默认比较的是地址值是否相同 按照正常情况:equals方法底层实际执行的两个对象在==,比较是地址值;假如:学生的年龄和姓名一致,看成同一个人 在自定义的类中,重写Object中的equals()方法,比较是两个对象的成员变量的值是否相同.自动生成即可! 三.String: 1.String表示字符串: 1).字符串是常量;它们的值在创建之后不能更改。 String是一种特殊的引用类型:默认值:null 2).构造方法: String():无参构造; String(byte[] bytes) :将字节数组转换成字符串; public String(byte[] bytes, int index,int length):将字节数组的一部分转换成字符串; public String(char[] value):将字符数组转化成字符串; toCharArray():将字符串转换成字符数组; public String(char[] value, int index, int count):将字符数组的一部分转换成字符串; public String(String original):将一个字符串常量构造成一个字符串对象。 3).常用的方法: Public int length()//返回此字符的长度 4).面试题: 数组中有没有length(),字符串中有没有length(),集合中有没有length()? 数组中没有length()方法,只有length属性; 字符串中有length()方法; 集合中没有length(),获取集合的元素数:size() (后面讲)。 5).面试题: String s1 = new String("abc"); String s1 = "abc" ; 这两个分别创建了几个对象? 6).String作为形式参数:它的效果和基本类型是一样的,形式参数的改变对对实际参数没有影响 (它一旦赋值,不能被改变) 2.String类: 1).String类的常用获取功能: public int length():获取字符串的长度; public char charAt(int index)返回指定索引处的字符; public int indexOf(int ch)返回指定字符在此字符串中第一次出现处的索引; 问题:既然传入的字符:这里为什么用int类型 'a'和97 都表示a public int indexOf(int ch,int fromIndex)返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索; public int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引; public int indexOf(String str,int fromIndex)回在此字符串中第一次出现指定字符串处的索引,从指定的索引开始搜索。 截取功能 public String substring(int beginIndex):从指定位置开始截取,默认截取到末尾,返回新的字符串; public String substring(int beginIndex, int endIndex):从指定位置开始到指定位置末尾结束,包前不包含. 遍历一个数组: 四.StringBuffer:

  1. StringBuffer::线程安全的可变字符序列.

线程(后面多线程中讲) 线程的安全问题,是难点(多线程属于难点) 多线程------>解决了多线程安全问题------>是死锁 :生产消费模式(Java中等待唤醒机制) 线程安全 --->同步的---->执行效率低 举例:银行的网站,医疗平台... 线程不安全---->不同步---->执行效率高 举例:新闻网站,XXX论坛... 2.面试题: StringBuffer和String的区别? 前者是一个可变的字符序列,后者是不可变的字符序列; 如果从内存角度考虑,String定义的时候,会在常量池中开辟空间,比较耗费内存,而StringBuffer,字符串缓冲区(里面存储的全部都是字符串),它会释放掉 ;
3.StringBuffer的构造方法: StringBuffer() :无参构造的形式,初始容量16; StringBuffer(int capacity) :指定容量构造一个字符串缓冲区; StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容. 4.StringBuffer的获取功能: public int length()返回长度; public int capacity()返回当前容量 (如果超过容量,系统自动分配(存储字符串的时候,英文的)). 5..StringBuffer的添加功能 (实际开发中用的多):public StringBuffer append(String/boolean....) : 在字符串缓冲区中追加数据(在末尾追加),并且返回字符串缓冲区本身 public StringBuffer insert(int offset,String str): 将当前str字符串添加到指定位置处,它返回字符串缓冲区本身 6.StringBuffer的删除功能: public StringBuffer deleteCharAt(int index):移除指定位置处的字符.. public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串. 7.public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身. 8.StringBuffer的截取功能: public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串 public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后, 返回值不在是缓冲区本身,而是一个新的字符串. 9.StringBuffer的替换功能: public StringBuffer replace(int start,int end,String str) 从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身