Java API

API概述  

API (Application Programming Interface) 应用程序编程接口,就是 JDK 提供给我们使用的类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。可以通过查找帮助文档来具体了解。

编程原则:任何对象在使用前先判断是否为null。

Scanner的使用(了解)  

1、在JDK5以后出现的用于键盘录入数据的类。(由于J2EE大多在页面录入数据所以很少用到)
	2、构造方法:
		A:讲解了System.in这个东西。
			它其实是标准的输入流,对应于键盘录入
		B:构造方法
			InputStream is = System.in;
			
			Scanner(InputStream is)
		C:常用的格式
			Scanner sc = new Scanner(System.in);
	3、基本方法格式:
		A:hasNextXxx() 判断是否是某种类型的
		B:nextXxx()	返回某种类型的元素
	4、要掌握的两个方法
		A:public int nextInt()
		B:public String nextLine()
	5、需要注意的小问题
		A:同一个Scanner对象,先获取数值,再获取字符串会出现一个小问题。
		B:解决方案:
			a:重新定义一个Scanner对象
			b:把所有的数据都用字符串获取,然后再进行相应的转换

String类的概述和使用(掌握) 

1、多个字符组成的一串数据。
		其实它可以和字符数组进行相互转换。
	2、构造方法:
		A:public String()
		B:public String(byte[] bytes)
		C:public String(byte[] bytes,int offset,int length)
		D:public String(char[] value)
		E:public String(char[] value,int offset,int count)
		F:public String(String original)
		下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
		G:String s = "hello";
	3、字符串的特点
		A:字符串一旦被赋值,就不能改变。
			注意:这里指的是字符串的内容不能改变,而不是引用不能改变。
		B:字面值作为字符串对象和通过构造方法创建对象的不同
			String s = new String("hello");和String s = "hello"的区别?

4、字符串创建与存储机制

 

	5、字符串的面试题(看程序写结果)
		A:==和equals()
			String s1 = new String("hello");
			String s2 = new String("hello");
			System.out.println(s1 == s2);// false
			System.out.println(s1.equals(s2));// true

			String s3 = new String("hello");
			String s4 = "hello";
			System.out.println(s3 == s4);// false
			System.out.println(s3.equals(s4));// true

			String s5 = "hello";
			String s6 = "hello";
			System.out.println(s5 == s6);// true
			System.out.println(s5.equals(s6));// true
		B:字符串的拼接
			String s1 = "hello";
			String s2 = "world";
			String s3 = "helloworld";
			System.out.println(s3 == s1 + s2);// false
			System.out.println(s3.equals((s1 + s2)));// true

			System.out.println(s3 == "hello" + "world");// false 这个我们错了,应该是true
			System.out.println(s3.equals("hello" + "world"));// true
	6、字符串的功能(自己补齐方法中文意思)
		A:判断功能
			boolean equals(Object obj)
			boolean equalsIgnoreCase(String str)
			boolean contains(String str)
			boolean startsWith(String str)
			boolean endsWith(String str)
			boolean isEmpty()
		B:获取功能
			int length()
			char charAt(int index)
			int indexOf(int ch)
			int indexOf(String str)
			int indexOf(int ch,int fromIndex)
			int indexOf(String str,int fromIndex)
			String substring(int start)
			String substring(int start,int end)
		C:转换功能
			byte[] getBytes()
			char[] toCharArray()
			static String valueOf(char[] chs)
			static String valueOf(int i)
			String toLowerCase()
			String toUpperCase()
			String concat(String str)
		D:其他功能
			a:替换功能 
				String replace(char old,char new)
				String replace(String old,String new)
			b:去空格功能
				String trim()
			c:按字典比较功能
				int compareTo(String str)
				int compareToIgnoreCase(String str) 
	7、字符串的案例
		A:模拟用户登录
		B:字符串遍历
		C:统计字符串中大写,小写及数字字符的个数
		D:把字符串的首字母转成大写,其他小写
		E:把int数组拼接成一个指定格式的字符串
		F:字符串反转
		G:统计大串中小串出现的次数
	8、String,StringBuffer,StringBuilder的区别?
		String 是内容不可变的,而 StringBuffer, StringBuilder 都是内容可变的。
		StringBuffer 是同步的,数据安全,效率低;
		StringBuilder 是不同步的,数据不安全,效率高。

9、String类的常见操作补充

  • 返回指定字符串在此字符串中最后一次出现处的索引
       
    int lastIndexOf(int ch)
  • 将此字符串与指定的字符串比较
       
    /*
     *String中的equals比较的是字符串的值非地址(重写了toString方法)
     */
    boolean equals(Object anObject)
  • 根据参数 regex 将原来的字符串分割为若干个子字符串
       
    String[] substring(int beginIndex)

StringBuffer类(掌握)

        由于字符串是常量,因此一旦创建,其内容和长度是不可改变的(与 String 类最大的区别)。如果需要对一个字符串进行修改,则只能创建新的字符串。

用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了一个字符串缓冲区类。StringBuffer供我们使用。

 

StringBuffer类的常见操作

StringBuffer具有String的大部分方法

  • StringBuffer 的构造函数
      
    public StringBuffer()    //无参构造方法
    public StringBuffer(int capacity)    //指定容量的字符串缓冲区对象
    public StringBuffer(String str)    //指定字符串内容的字符串缓冲区对象

     

  • StringBuffer 的方法
       
    public int capacity()    //返回当前容量。    理论值
    public int length()    //返回长度(字符数)。 实际值

     

  • StringBuffer 的添加功能
       
    public StringBuffer append(String str)    //可以把"任意类型数据"添加到字符串缓冲区里面,并返回字符串缓冲区本身
    
    public StringBuffer insert(int offset,String str)    //在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身(注意不要越界)

     

  • StringBuffer 的删除功能
       
    public StringBuffer deleteCharAt(int index)    //删除指定位置的字符,并返回本身
    public StringBuffer delete(int start,int end) //删除从指定位置开始指定位置结束的内容,并返回本身

     

  • StringBuffer 的替换功能
       
    public StringBuffer replace(int start,int end,String str)    //从start开始到end用str替换

    StringBuffer setCharAt(int index, char ch)  //修改指定位置 index 处的字符序列

     

  • StringBuffer 的截取功能
       
    StringBuffer setCharAt(int index, char ch)

     

  • 返回 StringBuffer 缓冲区的字符串
       
    String toString()

     

  • StringBuffer 的反转功能
       
    public StringBuffer reverse()

     

StringBuffer 和 String 相互转换

			
						String -- StringBuffer
								构造方法                   
								append()方法
						StringBuffer -- String
								构造方法
								toString()方法                 

 

StringBuffer 特性

			
	A:String,StringBuffer,StringBuilder的区别?
        String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。
        StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
    B:StringBuffer和数组的区别?
        二者都可以看出是一个容器,装其他的数据。
        但是呢,StringBuffer的数据最终是一个字符串数据。
        而数组可以放置多种数据,但必须是同一种数据类型的。
    C:形式参数问题
        String作为参数传递
        StringBuffer作为参数传递
			注意:
            String作为参数传递,效果和基本类型作为参数传递是一样的。                

 

Object类  

Object 类是层次结构的根类,每个类都使用 Object 作为超类。每个类都直接或者间接的继承自 Object 类。

Object类的构造方法有一个,并且是无参构造
这其实就是理解当时我们说过,子类构造方法默认访问父类的构造是无参构造

 

Object类的常见操作

  • 返回该对象的哈希码值(将地址转化为十六进制字符串形式)
        
    /*hashCode与equals的区别与联系
     *1、equals方法用于比较对象的内容是否相等(前提覆盖以后,默认比较地址值,String对象默认比较值)
     *2、hashcode方法只有在集合中用到
     *3、当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法    
         进行比较(判断对象的内容是否相等)。
     *4、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的        
         任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合
         中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合
         中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入
         到集合中,否则不放入。
     */
    
    public int hashCode()

     

  • 返回此 Object 的运行时类(编译的字节码文件对象:.class对象)
        
    public final Class getClass()

     

  • 以 String 的形式返回此 Class 对象所表示的实体
        
    /*通常使用 getClass().getName();
    *返回类的全路径
    */
    public String getName()

     

  • 返回对象的字符串表示(类的全路径@hashCode
        
    /*
     * Integer类下的一个静态方法:
     *         public static String toHexString(int i):把一个整数转成一个十六进制表示的字符串
     * 但是这个信息是没有任何意义的。所以,建议所有子类都重写该方法。
     *
     * 怎么重写呢?
     *         通常自动生成toString()方法。把该类的所有成员变量值组成返回即可。
     * 
     * 注意:
     *      直接输出一个对象的名称,其实就是调用该对象的toString()方法。
     */
    public String toString()

     

  • 判断对象是否相等(默认比较地址)
        

    /*
    * ==:
    * 基本类型:比较的就是值是否相同
    * 引用类型:比较的就是地址值是否相同
    * equals:
    * 重写该方法(自动生成),比较对象的成员变量值是否相同

    * 判断对象是否是某个类的对象:对象名 instanceof 类名
    */

    public boolean equals(Object obj)

     

  • 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回收,但是什么时候回收不确定
        
    protected void finalize()

     

  • 创建并返回此对象的一个副本
        
    protected Object equals(Object obj)

     

  • 例子
        
    /*
    * Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。 
    * 这个接口中没有方法是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。
    * public class Student implements Cloneable
    */
    
    public class StudentDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
    //创建学生对象
    Student s = new Student();
    s.setName("林青霞");
    s.setAge(27);
    
    //克隆学生对象
    Object obj = s.clone();
    Student s2 = (Student)obj;
    System.out.println("---------");
    
    System.out.println(s.getName()+"---"+s.getAge());
    System.out.println(s2.getName()+"---"+s2.getAge());
    
    //以前的做法
    Student s3 = s;
    System.out.println(s3.getName()+"---"+s3.getAge());
    System.out.println("---------");
    
    //其实是有区别的:改变克隆对象的成员变量值不会改变原对象的成员变量值
    //改变引用相同地址值的对象会改变原对象的成员变量值
    s3.setName("刘意"); s3.setAge(30); System.out.println(s.getName()+"---"+s.getAge()); System.out.println(s2.getName()+"---"+s2.getAge()); System.out.println(s3.getName()+"---"+s3.getAge()); } }

     

     

 

posted @ 2017-07-08 23:03  wangw0107  阅读(275)  评论(0编辑  收藏  举报