zoukankan      html  css  js  c++  java
  • 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()); } }
  • 相关阅读:
    消息路由的构成
    消息的构造
    消息传递通道
    消息传递系统
    EXtJS Ext.data.Model
    oracle coherence介绍及使用
    LINUX下安装和配置WEBLOGIC10.0.3
    WebLogic中"域"的概念
    WebLogic中的一些基本概念
    下属有能力却不服管,你该怎么办?
  • 原文地址:https://www.cnblogs.com/zhanwang/p/7138764.html
Copyright © 2011-2022 走看看