Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释

一、匿名内部类
《Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释》
匿名内部类时局部内部类的简写,使用代码如下:

 public abstract class Animal {
    public abstract void eat();
}
public interface MyInterFace {
    public abstract void method();
}
public class Dog  {
    public Animal dshow(){
        return (new Animal() {
            @Override
            public void eat() {
                System.out.println("匿名内部类作为返回值");
            }
        });
    }

    public MyInterFace dshow1() {
        return (new MyInterFace() {
            @Override
            public void method() {
                System.out.println("匿名内部类作为返回值");
            }
        });
    }
}
public class Test {
    public static void main(String[] args) {
        //匿名内部类作为show()的形参第一种形式
        show(new Animal() {
            @Override
            public void eat() {
                System.out.println("匿名内部类直接作为方法的形参");
            }
        });
        System.out.println("-----------------------------------");
        //匿名内部类作为show()的形参第二种形式
        Animal an1=new Animal() {
            @Override
            public void eat() {
                System.out.println("匿名内部类间接作为方法的形参");
            }
        };
        show(an1);
        System.out.println("-----------------------------------");
        //匿名内部类作为返回值
        Dog dog=new Dog();
        Animal an2=dog.dshow();
        show(an2);
        System.out.println("-----------------------------------");
        Dog dog1=new Dog();
        MyInterFace my =dog1.dshow1();
        show1(my);
    }
    public static void show(Animal an){
        an.eat();
    }
    public static void show1(MyInterFace my){
        my.method();
    }
}

需要注意的是:向下转型
二、Scanner类
《Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释》
三、Object类
《Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释》
四、String类
《Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释》
注意:(1)对String类的特点:字符串被创建,其值不在改变,改变的是其引用的值,利用内存图对其进行详解:
《Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释》
(2)对String s=new String(“hello”)和String s1=”hello”的区别,利用内存图展示:
《Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释》
(3)理解好含左不含右的意义。
五、StringBuffer类
《Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释》
(1)String和StringBuffer的相互转换,代码如下:

public class StringBufferTest2 {
    public static void main(String[] args) {
        //String-----StriingBuffer
        String str="sgjjlk";
        StringBuffer stringBuffer1 = new StringBuffer(str);
        StringBuffer stringBuffer2 = new StringBuffer().append(str);
        System.out.println(stringBuffer1);
        System.out.println(stringBuffer2);
        System.out.println("-------------------------------");
        //StringBuffer-------String
        StringBuffer s1 = new StringBuffer("cvhjbjk");
        String s2 = s1.toString();//toString()是转换为字符串输出
        System.out.println(s2);
        String s3 = s1.substring(0);//substring()截取字符串,返回的是字符串类型
        System.out.println(s3);

    }
}

(2)String和StringBuffer的作为形参的区别,代码如下:

public class StringBUffertest3 {
    public static void main(String[] args) {
        /*String 作为形参,虽然是引用类型,但是是一个常量,
        可以作为基本数据类型进行数据传递,但是其形参的改变不会改变实参的值
        * */
        String str="asdfg";
        setString(str);
        System.out.println(str);
        /**
         * StringBuffer作为形参,其是引用类型,形参的改变会影响实参的改变
         */
        StringBuffer s= new StringBuffer("asdfghjkl");
        setStringBuffer(s);
        System.out.println(s);
    }
    public static void setString(String str){
        str = str.replace('d', 'e');
        System.out.println(str);
    }
    public static void setStringBuffer(StringBuffer str){
        str=str.append("asdf").replace(2,5,"ty");
        System.out.println(str);
    }
}

六、包装类Integer
《Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释》
(1)int与String的相互转换代码:

public class Test {
    public static void main(String[] args) {
        //int ------------String
        int num=1000;
        //字符串的拼接
        String str="";
        str+=num;
        System.out.println(str);
        System.out.println("-----------------------");
        //valueOf(),将任意的数据类型转换为字符串
        String s = String.valueOf(num);
        System.out.println(s);
        System.out.println("-----------------------");
        //int---Integer---String
        Integer i1 = new Integer(num);
        String s1 = i1.toString(num);//toString()必须对象调用方法
        System.out.println(s1);
        System.out.println("-----------------------");

        //String-----int
        String st="111111";
        Integer in1 = new Integer(st);
        int in2 = in1.intValue(); //不是静态方法,返回的是int型数字
        System.out.println(in2);
        System.out.println("----------------------");
        int in3 = Integer.parseInt(st);   //静态的方法,只能通过类名来调用
        System.out.println(in3);

    }
}

特别注意,静态方法的调用时类名调用而不是对象的调用。
七、数组排序
《Java 匿名内部类、Object类、Scanner类、String类、StringBuffer类、包装类Integer和数组排序+代码解释》
(1)冒泡排序代码:

import java.util.Arrays;

public class MaoPaoSort {
    public static void main(String[] args) {
        int[] arr={24,69,80,57,13};
        sort(arr);
    }
    public static void sort(int[] arr){
        for(int i=0;i<arr.length;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;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

(2)选择排序代码

public class XUanZeTest {
    public static void main(String[] args) {
        int[] arr={24,69,80,57,13};
        sort(arr);
    }
    public static void sort(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;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

(3)二分法排序代码:

public class ErFenFa {
    public static void main(String[] args) {
        int[] arr={12,54,2,4,89};
        sort(arr);
        int index=erfenfa(arr,4);
        System.out.println(index);
    }
    public static void sort(int[] arr){
        for(int i=0;i<arr.length;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;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
    public static int erfenfa(int[] arr,int value){
        int minIdex=0;
        int maxIndex=arr.length-1;
        int midIndex=(minIdex+maxIndex)/2;
        while(minIdex<=maxIndex) {
            if (value == arr[midIndex]) {
                System.out.println("找到对应的值,索引值为:" );
                return midIndex;
            } else if (value < arr[midIndex]) {
                maxIndex = midIndex - 1;
            } else {
                minIdex = midIndex + 1;
            }
            midIndex=(minIdex+maxIndex)/2;
        }
        return -1;
    }
}

八、体会:
这部分内容真心是多,记住了又会忘记,忘记了继续记,记了三天,仍然没有全部记住,只能在后期的使用中再次加强记忆了。
总之,语言还是要多敲代码才能有效的理解。

    原文作者:春诗梅韵
    原文地址: https://blog.csdn.net/qq_41421480/article/details/83346861
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞