zoukankan      html  css  js  c++  java
  • 07 Object类,Scanner,Arrays类,String类,StringBuffer类,包装类

    Object类的概述:
    * A:Object类概述
        * 类层次结构的根类
        * 所有类都直接或者间接的继承自该类
    * B:构造方法
        * public Object()
        * 子类的构造方法默认访问的是父类的无参构造方法

    Object类的hashCode()方法

        * public int hashCode()
        * a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
        * b:不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同

    public class Demo_HashCode {
        public static void main(String[] args) {
            Object object1 = new Object();
            int hashCode = object1.hashCode();
            
            System.out.println(hashCode);
        }
    }
    View Code

    Object类的getClass()方法
        * public final Class getClass()
        * a:返回此 Object 的运行时类。
        * b:可以通过Class类中的一个方法,获取对象的真实类的全名称。    
            * public String getName()

    public class Demo_GetClass {
    
        public static void main(String[] args) {
            Person person = new Person();
            
            Class class1 = person.getClass();  // 获取该对象的字节码文件
            String name = class1.getName();  // 获取名称
            System.out.println(name); // com.fly.bean.Person
    
        }
    
    }
    View Code

    Object类的toString()方法
        * public String toString()
        * a:返回该对象的字符串表示。
    *
            
            public Stirng toString() {
                return name + "," + age;
            }
        * b:它的值等于:
            * getClass().getName() + "@" + Integer.toHexString(hashCode())
        * c:由于默认情况下的数据对我们来说没有意义,一般建议重写该方法。

    public class Demo_ToString {
        public static void main(String[] args) {
            /**
             *   public String toString() {
                    return getClass().getName() + "@" + Integer.toHexString(hashCode
    
    ());
                 }
             */
            Person person = new Person("张三",18);
    //        String string = person.toString();
    //        System.out.println(string); // com.fly.bean.Person@15db9742
            
            System.out.println(person.toString());
            System.out.println(person); // 如果直接打印对象的引用,会默认调用toString方
    
    法
        }
    }
    View Code


    Object类的equals()方法
        * a:指示其他某个对象是否与此对象“相等”。
        * b:默认情况下比较的是对象的引用是否相同。
        * c:由于比较对象的引用没有意义,一般建议重写该方法。

    public class Demo_Equals {
        public static void main(String[] args) {
            /*
               public boolean equals(Object obj) {
                    return (this == obj);
               }
            Object中的equals方法是比较对象的地址值
            开发中通常比较的是对象的属性值,相同属性是同一个对象
             * */
            Person person1 = new Person("张三",10);
            Person person2 = new Person("李四",11);
            Person person3 = new Person("李四",11);
            
            boolean b = person1.equals(person2);  // 比较两个对象是否相等
            System.out.println(b); //false
            
            System.out.println(person2.equals(person3)); //true // 重写之后比较的是对象
    
    的属性值
        }
    }
    View Code


    ==号和equals方法的区别
        ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是

    值,引用数据类型比较的是地址值
        equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重

    写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是

    对象中的属性
    Scanner:

    import java.util.Scanner;
    
    public class Demo1_Scanner {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    //        int i = scanner.nextInt();
    //        System.out.println(i);  //输入不是int类型 会抛出 InputMismatchException
            if (scanner.hasNextInt()) {
                int i = scanner.nextInt();
                System.out.println(i);
            }else {
                System.out.println("你输入的类型有误");
            }
        }
    
    }
    import java.util.Scanner;
    
    public class Demo2_Scanner {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String string = scanner.nextLine();
            System.out.println(string);  // 以
    作为结束标志
        }
    }
    public class Demo1_String {
    
        public static void main(String[] args) {
            String string = "abc"; // 字符串字面值"abc"也可以看成是一个字符串对象
            string = "def"; // 字符串是常量,一旦被赋值,就不能被改变
                            // 此时的"abc" 已经变为垃圾值
            System.out.println(string);
            
                // 常见的构造方法
            String string2 = new String(); // 空构造
            System.out.println(string2);
            
            byte[] bytes = {97,98,99};
            String string3 = new String(bytes); // 把字节数组转成字符串
            System.out.println(string3); // abc
            
            String string4 = new String(bytes, 1, 2); // 把字节数组的一部分转成字符串,
                                                    
    
                                  // String(byte[] bytes,int
    
    index,int length)
            System.out.println(string4); // bc
            
            char[] value = {'a','b','c'};
            String string5 = new String(value); // 把字符数组转成字符串
            System.out.println(string5);  // abc
    
        }
    
    }


    String类的常见面试题:

    * 1.判断定义为String类型的s1和s2是否相等
        * String s1 = "abc";
        * String s2 = "abc";
        * System.out.println(s1 == s2);     // true                
        * System.out.println(s1.equals(s2)); // true        
    * 2.下面这句话在内存中创建了几个对象?  2个,一个在常量池,一个在堆内存中
        * String s1 = new String("abc");            
    * 3.判断定义为String类型的s1和s2是否相等
        * String s1 = new String("abc");            
        * String s2 = "abc";
        * System.out.println(s1 == s2);    //false    ,地址不相同
        * System.out.println(s1.equals(s2)); //true
    * 4.判断定义为String类型的s1和s2是否相等
        * String s1 = "a" + "b" + "c";
        * String s2 = "abc";
        * System.out.println(s1 == s2);    // true,java的常量优化机制    
        * System.out.println(s1.equals(s2));// true
    * 5.判断定义为String类型的s1和s2是否相等
        * String s1 = "ab";
        * String s2 = "abc";   // 常量池
        * String s3 = s1 + "c"; // 指向堆内存的toString中
        * System.out.println(s3 == s2); //false
        * System.out.println(s3.equals(s2)); // true


    String类的判断功能:

        * boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
        * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
        * boolean contains(String str):判断大字符串中是否包含小字符串
        * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
        * boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
        * boolean isEmpty():判断字符串是否为空。


    "" 与null:

            /*
             *  ""是字符串常量,同时时一个String类的对象
             *  null是空常量,不能调用任何方法,否则或出现空指针异常,可以给任意的引用
    
    数据类型赋值
             * */
            String string = "";
            String string2 = null;
            
            System.out.println(string.isEmpty()); // true
        //    System.out.println(string2.isEmpty()); // NullPointerException

    String类的获取功能:

    /*String类的获取功能
        * 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):返回指定字符串在此字符串中从指定位置后第一
    
    次出现处的索引。
        * lastIndexOf
        * String substring(int start):从指定位置开始截取字符串,默认到末尾。
        * String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。顾头
    
    不顾尾*/
    
    public class Demo2_StringMethod {
    
        public static void main(String[] args) {
            // 获取字符串的长度
            String string = "fly";
            System.out.println(string.length()); //3
            String string2 = "飞?";
            System.out.println(string2.length()); // 2
            // 获取指定索引位置的字符
            char c = string2.charAt(0);
            System.out.println(c); ////返回指定字符在此字符串中第一次出现处的索引,找不到返回-1
            int i = string.indexOf('l');
            System.out.println(i); // 1
            
        }
    
    }

    String的转换功能:
        * byte[] getBytes():把字符串转换为字节数组。
        * char[] toCharArray():把字符串转换为字符数组。
        * static String valueOf(char[] chs):把字符数组转成字符串。
        * static String valueOf(int i):把int类型的数据转成字符串。
            * 注意:String类的valueOf方法可以把任意类型的数据转成字符串

        * String toLowerCase():把字符串转成小写。(了解)
        * String toUpperCase():把字符串转成大写。
        * String concat(String str):把字符串拼接。
        // gbk码表,一个中文代表两个字节,第一个字节肯定是负数

    String类的其他功能
    * A:String的替换功能   找不到不替换
        * String replace(char old,char new)
        * String replace(String old,String new)
    * B:String的去除字符串两空格及案例演示
        * String trim()
    * C:String的按字典顺序比较两个字符串
        * int compareTo(String str) 比较的是Unicode码表
        * int compareToIgnoreCase(String str) 不区分大小写
        


    import java.util.Scanner;
    
    public class Test2 {
    
        public static void main(String[] args) {
            /*
             * 输入的字符串反转
             * */
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个字符串");
            String string = scanner.nextLine();
            
            String s = "";
            char[] c = string.toCharArray(); // 将字符串转换为字符数组
            for (int i = c.length-1; i >= 0; i--) {
                s =s + c[i];
            }
            System.out.println(s);
        }
    
    }
    public class Demo1_StringBuffer {
    
        public static void main(String[] args) {
            /*
             * StringBuffer的构造方法的使用
             * */
            StringBuffer sb =  new StringBuffer();
            System.err.println(sb.length()); //0  容器的字符个数,实际值
            System.out.println(sb.capacity()); //16 容器的初始容量,理论值
            
            StringBuffer sb2 = new StringBuffer(10);
            System.out.println(sb2.length()); // 0
            System.out.println(sb2.capacity()); //10
            
            StringBuffer sb3 = new StringBuffer("fly");
            System.out.println(sb3.length()); //3
            System.out.println(sb3.capacity()); //19  16+3
        }
    




    public class Demo2_StringBuffer {
    
        public static void main(String[] args) {
            StringBuffer sBuffer = new StringBuffer();// StringBuffer是字符串缓冲区,
    
    new在堆内存创建一个对象
            StringBuffer sb = sBuffer.append(true);  // 不会创建对象,在不断向原缓冲区
    
    添加字符
            StringBuffer sb2 = sBuffer.append("fly");
            StringBuffer sb3 = sBuffer.append(123);
            
            System.out.println(sb); // truefly123  StringBuffer类重写了toString方法
            System.out.println(sb2); // truefly123
            System.out.println(sb3); // truefly123
        }
    
    }
    public class Demo3_StringBuffer {
        public static void main(String[] args) {
    //        sbDelete(); // 删除功能
    /*        StringBuffer sbBuffer = new StringBuffer("hello");
            sbBuffer.replace(0, sbBuffer.length(), "hi");
            System.out.println(sbBuffer); //hi
            
            sbBuffer.reverse(); // 反转
            System.out.println(sbBuffer); //ih
    */        
            StringBuffer sBuffer2 = new StringBuffer("hello world");
    //        String str = sBuffer2.substring(6);   // 截取
    //        System.out.println(str);  // world
            
            String str2 = sBuffer2.substring(0, 5);
            System.out.println(str2); // hello
            
            
        }
    
        private static void sbDelete() {
            StringBuffer  sBuffer = new StringBuffer();
    //        sBuffer.deleteCharAt(5);
    //        System.out.println(sBuffer); // StringIndexOutOfBoundsException 删除不存在
    
    的
            sBuffer.append("fly");
    //        sBuffer.deleteCharAt(2);
    //        System.out.println(sBuffer); // fl
            
            sBuffer.delete(0, sBuffer.length()); // 清空缓冲区
            System.out.println(sBuffer);
        }
    }
    public class Demo4_StringBuffer {
    
        public static void main(String[] args) {
            // String转为StringBuffer
            StringBuffer sBuffer = new StringBuffer("fly");
            System.out.println(sBuffer);
            
            StringBuffer sBuffer2 = new StringBuffer();
            sBuffer2.append("fly");
            System.out.println(sBuffer2);
            // StringBuffer转为String
            StringBuffer builder = new StringBuffer("fly");
            String string = new String(builder);
            System.out.println(string);
            
            String string2 = builder.toString();
            System.out.println(string2);
            
            String string3 = builder.substring(0, builder.length());
            System.out.println(string3);
        }
    
    }


    StringBuffer与StringBuilder
    每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无

    需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了

    一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,

    因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

    public class Demo5_StringBuffer {
    
        public static void main(String[] args) {
            String string = "hello";
            System.out.println(string); // hello
            change(string);
            System.out.println(string); // hello
            
            StringBuffer stringBuffer = new StringBuffer();
            stringBuffer.append("hello");
            System.out.println(stringBuffer); //hello
            change(stringBuffer);
            System.out.println(stringBuffer); //helloworld
        }
    
        private static void change(StringBuffer stringBuffer) {
            stringBuffer.append("world");
        }
    
        private static void change(String string) {
            string += "world"; // String类虽然是引用数据类型,但当作参数传递时和基本数
    
    据类型是一样的
        }
    
    }

    排序:

    public class Demo1_Array {
    
        public static void main(String[] args) {
            int[] arr = {23,69,70,57,15};
            
    //        bubbleSort(arr);
            selectSort(arr);
            stringPrint(arr);
        }
        // 冒泡排序
        public static void bubbleSort(int[] arr) {
            for(int i = 0;i < arr.length - 1;i++) {
                for (int j = 0; j < arr.length -1 -i; j++) {
                    if (arr[j] > arr[j+1]) {
                        int temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }
        }
        //选择排序
        public static void selectSort(int[] arr) {
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = i + 1; j < arr.length; j++) {
                    if (arr[i] > arr[j]) {
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
        }
        
        public static void stringPrint(int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]+" ");
            }
        }
    
    }


    二分查找:

    public class Demo2_Array {
    
        public static void main(String[] args) {
            // 二分查找
            // 前提必须是有序的
            int[] arr = {11,22,33,44,55,66,77};
            System.out.println(getIndex(arr, 55)); //4
            System.out.println(getIndex(arr, 88)); //-1
        }
        public static int getIndex(int[] arr,int value) {
            int min = 0;
            int max = arr.length - 1;
            int mid = (min + max) / 2;
            
            while(arr[mid] != value) {
                if(arr[mid] > value) {
                    max = mid - 1;
                }else if(arr[mid] < value) {
                    min = mid + 1;
                }
                mid = (min + max) / 2;
                if(min > max) {
                    return -1;
                }
            }
            return mid;
        }
    
    }


    Arrays类的使用:

    import java.util.Arrays;
    
    public class Demo3_Arrays {
        // Arrays类的使用
        public static void main(String[] args) {
            int[] arr = {33,22,55,11,44};
            // 数组转字符串
            System.out.println(Arrays.toString(arr)); //[33, 22, 55, 11, 44]
            
            // 排序
            // 底层用的快速排序
            Arrays.sort(arr);
            System.out.println(Arrays.toString(arr)); // [11, 22, 33, 44, 55]
            
            int[] arr2 = {11,22,33,44,55,66,77};
            // 二分查找
            // 有序的,不能有相同的
            System.out.println(Arrays.binarySearch(arr2, 22)); //1
            System.out.println(Arrays.binarySearch(arr2, 77)); //6
            System.out.println(Arrays.binarySearch(arr2, 12)); //-2
            System.out.println(Arrays.binarySearch(arr2, 99)); //-8 找不到返回  应在的
    
    位置负数后-1
        }
    }
    /*基本类型和包装类的对应:
    byte Byte
    short Short
    int Integer
    long Long
    float Float
    double Double
    char Character
    boolean Boolean*/
    
    public class Demo1_Integer {
    
        public static void main(String[] args) {
            // 进制
            System.out.println(Integer.toBinaryString(60)); // 111100
            System.out.println(Integer.toOctalString(60)); // 74
            System.out.println(Integer.toHexString(60)); //3c
            //int 类型能够表示的最大值,最小值
            System.out.println(Integer.MAX_VALUE); // 2147483647
            System.out.println(Integer.MIN_VALUE); // -2147483648
            //数字
            Integer integer = new Integer(100);
            System.out.println(integer); //100
            //数字字符串
            Integer integer2 = new Integer("100");
            System.out.println(integer2); //100
            
            // int--String
            int i = 100;
            String string = i + "";  // 方式1   //推荐
            String string2 = String.valueOf(i);  // 方式2     //推荐
            Integer integer3 = new Integer(i);  // 方式3
            String string3 = integer3.toString();
            String string4 = Integer.toString(i); // 方式4
            
            // String--int
            String string5 = "200";
            Integer integer4 = Integer.parseInt(string5); // 方式1   //推荐
            Integer integer5 = new Integer(string5); // 方式2
            int i5 = integer5.intValue();
            
            // parseXX方法
            // Character没有,字符串到字符的转换通过toCharArray()就可以把字符串转换为字
    
    符数组
            
            
        }
    
    }
    public class Demo4_JDK5 {
    
        /**
         * * A:JDK5的新特性
                * 自动装箱:把基本类型转换为包装类类型
                * 自动拆箱:把包装类类型转换为基本类型
            * B:案例演示
                * JDK5的新特性自动装箱和拆箱
                
                * Integer ii = 100;
                * ii += 200;
            * C:注意事项
                * 在使用时,Integer  x = null;代码就会出现NullPointerException。
                * 建议先判断是否为null,然后再使用。
         */
        public static void main(String[] args) {
    //        int x = 100;
    //        Integer i1 = new Integer(x);            //将基本数据类型包装成对象,
    
    装箱
    //        
    //        int y = i1.intValue();                    //将对象转换为基本
    
    数据类型,拆箱
            
            Integer i2 = 100;                        //自动装箱,
    
    把基本数据类型转换成对象
            int z = i2 + 200;                        //自动拆箱,
    
    把对象转换为基本数据类型
            System.out.println(z); //300
            
            Integer i3 = null;
    //        int a = i3 + 100;                        //底层用i3
    
    调用intValue,但是i3是null,null调用方法就会出现
    //        System.out.println(a);                    //空指针异常
    
    java.lang.NullPointerException
        }
    
    }
    public class Demo5_Integer {
    
        public static void main(String[] args) {
            Integer i1 = new Integer(97);
            Integer i2 = new Integer(97);
            System.out.println(i1 == i2);                //false
            System.out.println(i1.equals(i2));            //true
            System.out.println("-----------");
        
            Integer i3 = new Integer(197);
            Integer i4 = new Integer(197);
            System.out.println(i3 == i4);                //false
            System.out.println(i3.equals(i4));            //true
            System.out.println("-----------");
        
            Integer i5 = 127;
            Integer i6 = 127;
            System.out.println(i5 == i6);                //true
            System.out.println(i5.equals(i6));            //true
            System.out.println("-----------");
        
            Integer i7 = 128;
            Integer i8 = 128;
            System.out.println(i7 == i8);               // false
            System.out.println(i7.equals(i8));            //true
            
            /*
             * -128到127是byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,
    
    而是从常量池中获取
             * 如果超过了byte取值范围就会再新创建对象
             *
             * public static Integer valueOf(int i) {
                    assert IntegerCache.high >= 127;  // 断言
                    if (i >= IntegerCache.low && i <= IntegerCache.high)            
    
    //i>= -128 && i <= 127
                        return IntegerCache.cache[i + (-IntegerCache.low)];
                    return new Integer(i);
                }
             */
        }
    
    }
  • 相关阅读:
    转:wcf大文件传输解决之道(1)
    转:WCF传送二进制流数据基本实现步骤详解
    创建一个简单的WCF程序2——手动开启/关闭WCF服务与动态调用WCF地址
    创建一个简单的WCF程序
    转:【专题十二】实现一个简单的FTP服务器
    转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器
    转:【专题十】实现简单的邮件收发器
    转:【专题九】实现类似QQ的即时通信程序
    转:【专题八】P2P编程
    转:【专题七】UDP编程补充——UDP广播程序的实现
  • 原文地址:https://www.cnblogs.com/fly-book/p/9849208.html
Copyright © 2011-2022 走看看