面向对象深入和数组深入

@面向对象深入和数组深入

抽象类的意义:为子类提供统一的,规范的模板,子类必须实现相关的抽象方法。

测试抽象类
要点:
1、父类没有实现
2、子类必须实现

示例代码:

 public abstract class Animal {
        public static void main(String[] args) {
            Animal animal = new Dog();
        }

第一:没有实现 第二:子类必须实现

abstract public void shout();
    public void run() {
        System.out.println("泡泡");
    }
}
class Dog extends Animal{
    @Override
    public void shout() {
        System.out.println("汪汪");
    }
}

接口详解_多继承_面向接口编程。

测试接口以及实现类
示例代码:

public class TestInterface {
    public static void main(String[] args) {
        Volant volant = new Angel();
        volant.fly();
        System.out.println("######################");
        Angel angel;
        angel = new Angel();
        angel.fly();
        angel.helpOther();
    }
}

飞行接口

interface Volant{
    int FLY_HEIGHT = 100;
    void fly();
}
interface Honest{
    void helpOther();
}
class Angel implements Volant,Honest{
    @Override
    public void fly() {
        System.out.println("Angel.fly");
    }
    @Override
    public void helpOther() {
        System.out.println("Angel.helpOther");
    }//实现类可以实现多个父接口
}
class GoodMan implements Honest{

@Override
public void helpOther() {
    System.out.println("GoodMan.helpOther");
}
}
class BirdMan implements Volant{

@Override
public void fly() {
    System.out.println("BirdMan.fly");
}
}
public class TestInterface2 {
}

接口可以多继承:接口C继承接口A和B

interface A{
    void testa();
}
interface B{
    void testb();
}
    /*接口可以多继承:接口C继承接口A和B*/
    interface C extends A,B{
        void testc();
    }
    class Test implements C{

@Override
public void testa() {

}

@Override
public void testb() {

}

@Override
public void testc() {
	}
}

内部类_静态和非静态内部类_匿名内部类_方法内部类。

测试静态内部类
示例代码:

public class TestStaticInnerClass {
    public static void main(String[] args) {
        Outer2.Inner2 inner2 = new Outer2.Inner2();
    }
}
class Outer2{
    static class Inner2{
    }
}

测试非静态内部类
要点:
1、内部类必须寄存于一个外部类对象
2、可以直接访问外部类成员
3、外部类不能有静态方法 以及属性

示例代码:

public class TestInnerClass {
    public static void main(String[] args) {
        //创建内部类对象
        Outer.Inner inner = new Outer().new Inner();
        inner.show();
    }
}
class Outer{
    private int age = 10;
    public void testOuter(){
        System.out.println("Outer.testOuter");
    }
    class Inner{
        int age = 20;
        public void show(){
            int age = 5;
            System.out.println("外部类的成员变量age"+Outer.this.age);
            System.out.println("内部类的成员变量age"+this.age);
            System.out.println("局部变量age"+age);
        }
    }
}

测试匿名内部类
示例代码:

public class TestAnoymousInnerClass {
    public static void test01(AA a){
        a.aa();
    }

public static void main(String[] args) {
    TestAnoymousInnerClass.test01(new AA(){

        @Override
        public void aa() {
            System.out.println("TestAnoymousInnerClass.main()newAA(){}.aa");
        }
    });
}
}
interface AA{
    void aa();
}

String类_常量池_字符串比较。

测试String类基本用法
示例代码:

 public class TestString {
    public static void main(String[] args) {
        String string;
        String string1 = "bcd";
        string = new String("abc");
        String string2 = "29"+30; //不是加法,是字符串连接符。
        System.out.println(string2);
        System.out.println("######################");
        String str10 = "gaoqi";
        String str11 = "gaoqi";
        String str12 = new String("gaoqi");
        System.out.println(str10 == str11);
        System.out.println(str12 == str11); //str11和str12不是一个对象
    //比较字符串通常使用equals
    System.out.println(str11.equals(str12));
}
}

测试String类的常用方法
示例代码:

public class TestString2 {
    public static void main(String[] args) {
       String string = "core Java";
        String string1 = "Core Java";
        System.out.println(string.charAt(3));//提取下表为三的字符
        System.out.println(string1.length());//字符串的长度
        System.out.println(string.equals(string1));//比较两个字符串是否相等
        System.out.println(string.equalsIgnoreCase(string1));//\比较字符串忽略大小写
        System.out.println(string.indexOf("Jave"));//判断是否含有字符串,第一次出现的位置
        System.out.println(string.replace('o','f'));//替换
        System.out.println(string);
        String string = "";
        String string1 = "How are you";
        String string2 = "   How old are you?  ";
        System.out.println(string1.startsWith("How"));//是否以How开头
        System.out.println(string1.endsWith("you"));//是否以you结尾
        System.out.println(string1.substring(4,7));//提取字符串:下表[4,7)不包括7
        System.out.println(string1.toLowerCase());//转小写
        System.out.println(string1.toUpperCase());//转大写
        System.out.println(string2.trim());//去除字符串首尾的空格,中间的不能去除
        System.out.println(string2);//因为String是不可变字符串,老的不会变
    }
}

数组的拷贝_插入和删除元素本质_数组扩容操作以及Arrays工具类的使用。

测试数组的拷贝_插入和删除元素本质_数组扩容操作
示例代码:

public class TestArrayCopy {
    public static void main(String[] args) {
        /*String[] string = {"阿里","腾讯","微软","百度","京东"};
        removeElement(string,1);
        System.out.println("#$###############");
        string = extendRange(string);*/
        //testBasicCopy();
        String[] strings = {"aa","bb","cc"};
        addElements(strings,2,"dd");
    }

public static void testBasicCopy() {
    String[] strings = {"aa", "bb", "cc", "dd", "ee"};
    String[] strings1 = new String[10];
    System.arraycopy(strings, 2, strings1, 6, 3);
    for (int i = 0; i < strings1.length; i++) {
        System.out.println(i + ":" + strings1[i]);
    }
}

//测试从数组中删除某个元素(本质上还是数组的拷贝);删除数组中指定索引位置的元素,并将原数组返回
public static String[] removeElement(String[] strings, int index) {
    //String[] strings1 = new String[5];
    System.arraycopy(strings, index, strings, index - 1, strings.length - index);
    strings[strings.length - 1] = null;
    for (String a : strings) {
        System.out.println(a);
    }
    return strings;
}

//数组的扩容(本质:先定义一个更大的数组,然后将原数组内容原封不动拷贝到新数组中)
public static String[] extendRange(String[] strings) {
    //String[] strings = {"aa","bb","cc"};
    String[] strings1 = new String[strings.length + 10];
    System.arraycopy(strings, 0, strings1, 0, strings.length);//完全copy
    for (String aa : strings1) {
        System.out.println(aa);
    }
    return strings1;
}
//数组的插入
public static String[] addElements(String[] strings,int index,String string){
    String[] strings1 = new String[strings.length+1];
    System.arraycopy(strings,0,strings1,0,index);
    System.arraycopy(strings,index,strings1,index+1,strings.length-index);
    strings1[index] = string;
    for (String a:strings1
         ) {
        System.out.println(a);
    }
    return strings1;
}
}
public class TestArrays {
    public static void main(String[] args) {
        int[] a = {100,20,30,5,150,80,200};
        System.out.println(a);
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.binarySearch(a,31));//找到返回索引 找不到返回负数
    }
}

多维数组。

测试二维数组
示例代码:

 public class Test2DinmensionArray {
    public static void main(String[] args) {
        //int[] a= new int[3];
        //Car[] cars = new Car[3];
        int[][] a = new int[3][];
        a[0] = new int[]{20,30};
        a[1] = new int[]{10,15,80};
        a[2] = new int[]{50,60};
        System.out.println(a[1][2]);
        int[][] b ={{20,30,40,},{50,20},{100,200,300,400}};
        System.out.println(b[0][2]);
    }
}
//静态初始化二维数组
class Car{

}

多维数组存储表格数据
示例代码:

 public class TestAyyarTable {
    public static void main(String[] args) {
        Object[] emp1 = {1001,"金涛",18,"学生","2019-6-29"};
        Object[] emp2 = {1001,"金秀",19,"学生","2019-6-29"};
        Object[] emp3 = {1001,"金小花",18,"学生","2019-6-29"};
        Object[][] tableDate = new Object[3][];
        tableDate[0] = emp1;
        tableDate[1] = emp2;
        tableDate[2] = emp3;
        for (Object[] temp: tableDate
             ) {
            System.out.println(Arrays.toString(temp));
        }
    }
}

冒泡排序_优化排序。

测试冒泡排序
示例代码:

public class TestBubbleSort {
    public static void main(String[] args) {
        int[] values = {3,1,6,2,9,0,7,4,5,8};
        int temp = 0;
        for (int i =0;i<values.length-1;i++){
            boolean flag = true;
            for (int j = 0;j<values.length-1-i;j++){
                //比较大小换顺序
                if (values[j] > values[j+1]) {
                    temp = values[j];
                    values[j] = values[j+1];
                    values[j+1] = temp;
                    flag = false;
                }
                System.out.println(Arrays.toString(values));
            }
            if (flag){
                System.out.println("结束!!!!!!!!");
                break;
            }
            System.out.println("######################");
        }
    }
}

二分法查找_折半检索。

测试二分法折半查找(折半检索)
示例代码:

 public class TestBinarySearch {
    public static void main(String[] args) {
        int[] arr = {30,20,50,10,80,9,7,12,100,40,8};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        System.out.println(myBinarySearch(arr,400));
    }
    public static int myBinarySearch(int[] arr,int value) {
        int low = 0;
        int high = arr.length - 1;
        while (low <= high) {
            int mid = (low + high) / 2;
            if (value == arr[mid]) {
                return mid;
            }
            if (value>arr[mid]){
                low = mid+1;
            }
            if (value<arr[mid]){
                high = mid -1;
            }
        }
        return -1;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值