• Java复习,Java知识点以及Java面试题(三)


    Object

       类层次结构的跟类,每个类都使用Object作为超类,每个类都直接或者间接继承于Object

      构造方法 public Object()

      成员方法 :

        public int hashCode():返回该对象的哈希码值,哈希值是根据哈希算法计算出来,于地址值有关

        public final Class getClass(): 返回此Object类的运行时类 

        toString() 返回对象的字符串表示,默认是由类的全路径+'@'+哈希值的十六进制表示。 这个表示其实是没有意义的,一般子类都会重写该方法。 可以自动生成    

        equals()比较两个对象是否相同。默认情况下,比较的是地址值是否相同。
    而比较地址值是没有意义的,所以,一般子类也会重写该方法。可以自动生成。

        finalize() 用于垃圾回收,在不确定的时间

        clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。

        直接输出一个对象名称,其实默认调用了该对象的toString()方法。

      面试题
        ==和equals()的区别?
        A:==
          基本类型:比较的是值是否相同
          引用类型:比较的是地址值是否相同
        B:equals()
          只能比较引用类型。默认情况下,比较的是地址值是否相同。
          但是,我们可以根据自己的需要重写该方法。

    String

      构造方法:public String()
           public String(byte[] bytes)
           public String(byte[] bytes,int offset,int length)
           public String(char[] value)
           public String(char[] value,int offset,int count)
           public String(String original)
      面试题:

          字面值作为字符串对象和通过构造方法创建对象的不同

          String s = new String("hello");和String s = "hello"的区别?

          前者创建两个对象后者创建一个对象

     1 /*
     2  * 看程序写结果
     3  */
     4 public class StringDemo3 {
     5     public static void main(String[] args) {
     6         String s1 = new String("hello");
     7         String s2 = new String("hello");
     8         System.out.println(s1 == s2);// false
     9         System.out.println(s1.equals(s2));// true
    10 
    11         String s3 = new String("hello");
    12         String s4 = "hello";
    13         System.out.println(s3 == s4);// false
    14         System.out.println(s3.equals(s4));// true
    15 
    16         String s5 = "hello";
    17         String s6 = "hello";
    18         System.out.println(s5 == s6);// true
    19         System.out.println(s5.equals(s6));// true
    20     }
    21 }
     1 /*
     2  * 看程序写结果
     3  * 字符串如果是变量相加,先开空间,在拼接。
     4  * 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。
     5  */
     6 public class StringDemo4 {
     7     public static void main(String[] args) {
     8         String s1 = "hello";
     9         String s2 = "world";
    10         String s3 = "helloworld";
    11         System.out.println(s3 == s1 + s2);// false 字符串拼接是先开了一个空间(X002)然后在进行拼接而不是直接指向s3所指向的那个位置(X001)(方法区的常量池中).所以地址值不一样,false。
    12         System.out.println(s3.equals((s1 + s2)));// true
    13 
    14         System.out.println(s3 == "hello" + "world");// false 这个我们错了,应该是true
    15         System.out.println(s3.equals("hello" + "world"));// true
    16 
    17         // 通过反编译看源码,我们知道这里已经做好了处理。
    18         // System.out.println(s3 == "helloworld");
    19         // System.out.println(s3.equals("helloworld"));
    20     }
    21 }

      与判断功能相关的方法

        boolean equals(object obj): 

        boolean equalsIgnoreCase(String str):

        boolean contains(String str):

        boolean startwith(String str):

        boolean endswith(String str):

        boolean isEmpty();

      与获取相关的方法

        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):从指定位置开始到指定位置结束截取字符串。

    字符串的遍历:

      1. charAt()获取每个字符,length()用来循环

      2.  toCharArray() 转换成字符数组,在对数组进行遍历

      

      与转换相关的方法

        byte[] getBytes():把字符串转换为字节数组。

        char[] toCharArray():把字符串转换为字符数组。

        static String valueOf(char[] chs):把字符数组转成字符串。

        static String valueOf(int i):把int类型的数据转成字符串。

        String toLowerCase():把字符串转成小写。

        String toUpperCase():把字符串转成大写。

        String concat(String str):把字符串拼接。

      其他常用方法

         String replace(char old, char new)

         String replace(String old, String new)

         String trim()

         int compateTo(String str)

         int compareToIgnoreCase(String str)

    StringBuffer

      线程安全的可变字符串

      StringBuffer和String的区别? 前者长度和内容可变,后者不可变。如果使用前者做字符串的拼接,不会浪费太多的资源。

      构造方法:StringBuffer的构造方法:

             public StringBuffer(): 

             public StringBuffer(int capacity): 

             public StringBuffer(String str): 

      StringBuffer的方法:

        public int capacity():

        public int length():

        添加:public StringBuffer append(String str): 把任意类型数据添加到字符串缓冲区里,并返回字符串缓冲区本身。

             public StringBuffer insert(int offset, String str): 在指定位置把任意类型数据插入到字符串缓冲区里面,并返回字符缓冲区本身。

        删除:public StringBuffer deleteCharAt(int index):

           public StringBuffer delete(int start, int end):

        替换:public StringBuffer replace(int start, int end, String str):

        反转:public StringBuffer reverse()

        截取:public String substring(int start):

           public String substring(int start, int end):

    String和StringBuffer相互转换:

      StringBuffer的构造方法 public StringBuffer(String str):

      StringBuffer的append方法; 

      String的构造方法 public String(StringBuffer buffer):

      StringBuffer的toString方法;

    StringBuilder

      线程不安全的可变字符串

      面试题:

        String, StringBuffer, StringBuilder的区别?

          String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的

          StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高

        StringBuffer和数组的区别?

          两者都可以看出是一个容器,装其他的数据

          但是StringBuffer的数据最终是一个字符串数据

          而数组可以放置多种数据,但是必须是同一种数据类型

        

     1 /* 形式参数问题
     2  * String作为参数传递
     3  * StringBuffer作为参数传递 
     4  * 
     5  * 形式参数:
     6  *         基本类型:形式参数的改变不影响实际参数
     7  *         引用类型:形式参数的改变直接影响实际参数
     8  * 
     9  * 注意:
    10  *         String作为参数传递,虽然String是引用类型但是效果和基本类型作为参数传递是一样的。
    11  *        SreingBuffer运用赋值符号时形式参数的改变不影响实际参数。运用append()方法时,形式参数的改变直接影响实际参数
    12  */
    13 public class StringBufferDemo {
    14     public static void main(String[] args) {
    15         String s1 = "hello";
    16         String s2 = "world";
    17         System.out.println(s1 + "---" + s2);// hello---world
    18         change(s1, s2);
    19         System.out.println(s1 + "---" + s2);// hello---world
    20 
    21         StringBuffer sb1 = new StringBuffer("hello");
    22         StringBuffer sb2 = new StringBuffer("world");
    23         System.out.println(sb1 + "---" + sb2);// hello---world
    24         change(sb1, sb2);
    25         System.out.println(sb1 + "---" + sb2);// hello---worldworld
    26 
    27     }
    28 
    29     public static void change(StringBuffer sb1, StringBuffer sb2) {
    30         sb1 = sb2;
    31         sb2.append(sb1);
    32     }
    33 
    34     public static void change(String s1, String s2) {
    35         s1 = s2;
    36         s2 = s1 + s2;
    37     }
    38 }

    Arrays

      针对数组进行操作的工具类

      public static String toString(int[] a):

      public static void sort(int[] a):  底层快排实现

      public static int binarySearch(int[] a, int key):

    基本类型包装类

      Integer

        构造方法:public Integer (int value)

             public Integer (String s)

     1 /*
     2  * int类型和String类型的相互转换
     3  * 
     4  * int -- String
     5  *         String.valueOf(number)
     6  * 
     7  * String -- int
     8  *         Integer.parseInt(s)
     9  */
    10 public class IntegerDemo {
    11     public static void main(String[] args) {
    12         // int -- String
    13         int number = 100;
    14         // 方式1
    15         String s1 = "" + number;
    16         System.out.println("s1:" + s1);
    17         // 方式2
    18         String s2 = String.valueOf(number);
    19         System.out.println("s2:" + s2);
    20         // 方式3
    21         // int -- Integer -- String
    22         Integer i = new Integer(number);
    23         String s3 = i.toString();
    24         System.out.println("s3:" + s3);
    25         // 方式4
    26         // public static String toString(int i)
    27         String s4 = Integer.toString(number);
    28         System.out.println("s4:" + s4);
    29         System.out.println("-----------------");
    30 
    31         // String -- int
    32         String s = "100";
    33         // 方式1
    34         // String -- Integer -- int
    35         Integer ii = new Integer(s);
    36         // public int intValue()
    37         int x = ii.intValue();
    38         System.out.println("x:" + x);
    39         //方式2
    40         //public static int parseInt(String s)
    41         int y = Integer.parseInt(s);
    42         System.out.println("y:"+y);
    43     }
    44 }

       面试题

     1 /*
     2  * 看程序写结果
     3  * 
     4  * 注意:Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据,否则就创建一个新的空间
     5  */
     6 public class IntegerDemo {
     7     public static void main(String[] args) {
     8         Integer i1 = new Integer(127);
     9         Integer i2 = new Integer(127);
    10         System.out.println(i1 == i2);
    11         System.out.println(i1.equals(i2));
    12         System.out.println("-----------");
    13 
    14         Integer i3 = new Integer(128);
    15         Integer i4 = new Integer(128);
    16         System.out.println(i3 == i4);
    17         System.out.println(i3.equals(i4));
    18         System.out.println("-----------");
    19 
    20         Integer i5 = 128;
    21         Integer i6 = 128;
    22         System.out.println(i5 == i6);          //false
    23         System.out.println(i5.equals(i6));    //true
    24         System.out.println("-----------");
    25 
    26         Integer i7 = 127;
    27         Integer i8 = 127;
    28         System.out.println(i7 == i8);        //true
    29         System.out.println(i7.equals(i8));    //true
    30 
    31         // 通过查看源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间
    32         // Integer ii = Integer.valueOf(127);
    33     }

      Byte

      Short

      Long

      Float

      Double

      Character

        构造方法:public Character(char value)

        public static boolean isUpperCase(char ch):判断给定的字符是否是大写字符

        public static boolean isLowerCase(char ch):判断给定的字符是否是小写字符

        public static boolean isDigit(char ch):判断给定的字符是否是数字字符

        public static char toUpperCase(char ch):把给定的字符转换为大写字符

        public static char toLowerCase(char ch):把给定的字符转换为小写字符

      Boolean

    正则表达式:

      Pattern类:正则表达式的编译表示形式

      正则表达式规则:

    A:字符
        x 字符 x。举例:'a'表示字符a
        \ 反斜线字符("")。
        
     新行(换行)符 ('u000A') 
        
     回车符 ('u000D')
        
    B:字符类
        [abc] a、b 或 c (3者选其一)(简单类) 
        [^abc] 任何字符,除了 a、b 或 c(否定) 
        [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) 
        [0-9] 0到9的字符都包括
        
    C:预定义字符类
        . 任何字符。我的就是.字符本身,怎么表示呢? .
        d 数字:[0-9]
        w 单词字符:[a-zA-Z_0-9]
            在正则表达式里面组成单词的东西必须有这些东西组成
    
    D:边界匹配器
        ^ 行的开头 
        $ 行的结尾 
         单词边界
            就是不是单词字符([a-zA-Z_0-9])的地方。
            举例:hello world?haha;xixi
        
    E:Greedy 数量词 
        X? X,一次或一次也没有
        X* X,零次或多次
        X+ X,一次或多次
        X{n} X,恰好 n 次 
        X{n,} X,至少 n 次 
        X{n,m} X,至少 n 次,但是不超过 m 次 

       判断:String类的public boolean matches(String regex):

       分割:String类的public String[] split(String regex):

       替换:String类的public String replaceAll(String regex,String replacement)

       Pattern和matcher的使用

    Math

      成员变量:

        public static final double PI

        public static final double E

      成员方法

        public static int abs(int a):绝对值

        public static double ceil(double a ):向上取整

        public static double floor(double a):向下取整

        public static int max(int a, int b):返回最大值

        public static double pow(double a, double b):平方根

        public static double random():产生0到1随机数

        public static int round(float a):四舍五入

        public static double sqrt(double a):正平方根

    Random

      构造方法:public Random(): 没有给种子,用的是默认种子,是当前时间的毫秒值

           public Random(long seed): 给出指定的种子 给定种子后随机出来的数是固定的

       成员方法:public int nextInt():

            public int nextInt(int n):

    System

      无构造方法,不能被实例化

      成员方法:public static void gc():  运行垃圾回收器 

           public static void exit(int status): 终止当前正在运行的java虚拟机,参数用作状态码;根据惯例,非 0 的状态码表示异常终止。即表示0状态码表示正常终止。

           public static long currentTimeMillis():返回以毫秒为单位的当前时间[可以用来计算程序运行的时间]    

           public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length): 用于将一个数组的元素快速拷贝到另一个数组

      

    BigInteger

      构造方法:BigInteger(String val)

      成员方法:

        public BigInteger add(BigInteger val):加
        public BigInteger subtract(BigInteger val):减
        public BigInteger multiply(BigInteger val):乘
        public BigInteger divide(BigInteger val):除
        public BigInteger[] divideAndRemainder(BigInteger val):返回商和余数的数组

    BigDecimal

      由于在运算的时候,float类型和double很容易丢失精度,为了能精确的表示、计算浮点数,Java提供了BigDecimal。BigDecimal类:不可变的、任意精度的有符号十进制数,可以解决数据丢失问题。

      构造方法:public BigDecimal(String val)

      成员方法:public BigDecimal add(BigDecimal augend)

           public BigDecimal subtract(BigDecimal subtrahend)

           public BigDecimal multiply(BigDecimal multiplicand)

           public BigDecimal divide(BigDecimal divisor)

           public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):商,几位小数,如何舍取

    Date

      构造方法:Date():根据当前的默认毫秒值创建日期对象

          Date(long date):根据给定的毫秒值创建日期对象

      成员方法:public long getTime(): 获取时间,以毫秒为单位

           public void setTime(long time):设置时间

      

    DateFormat

      Date -- String(格式化)
        public final String format(Date date)
      String -- Date(解析)
        public Date parse(String source)

      DateForamt:可以进行日期和字符串的格式化和解析,但是由于是抽象类,所以使用具体子类SimpleDateFormat。

      SimpleDateFormat的构造方法:
        SimpleDateFormat():默认模式
        
    SimpleDateFormat(String pattern):给定的模式(该模式为:年 y月 M 日 d时 H分 m秒 s)

    Calendar

      抽象类,使用Calender.getInstance()获取子类对象

      public int get (int field): 返回给定日历字段的值,日历类中的每个日历字段都是静态的成员变量,并且是int类型。   

      public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作。

      public final void set(int year,int month,int date):设置当前日历的年月日

      

  • 相关阅读:
    Uliweb模板分析
    从高宏伟处借来的HOOK API代码
    ActiveX获取脚本对象
    uliweb数据库分析
    Java初入门(from c++ 2 java)(一)
    VS2010调试sharepoint2010经常Web服务器进程由IIS终止 的解决办法
    SharePoint 2010 部署 WSP 包
    sharepoint 2010 "若要在 Visual Studio 中与 SharePoint 项目进行交互,您的系统用户帐户必须拥有管理员特权。"的解决方法
    SQL 2008 安装问题 共享功能目录(x86) 服务提供的凭据无效 解决版本
    SharePoint 2010 网站集 备份 还原
  • 原文地址:https://www.cnblogs.com/AICROC/p/13652595.html
Copyright © 2020-2023  润新知