java基础学习笔记3

java基础学习笔记3

对象转型

父类对象引用 指向 子类对象 叫 向上转型upcasting

例如:Person a=new Student();

a只能访问Person里面的成员,而不能访问Student里面新增的成员。

把父类转化为子类,叫向下转型 downcasting

例如:Student b=(Student)a;

现在b就可以访问Student里面的成员了。

instanceof
class Person {
    String name;
    int age;
}
class Student extends Person {
    int grade;
}

//定义两个类,一个父类一个子类
//子类 instanceof父类 true
//父类 instanceof子类 false
public class ins {
    public static void main(String[] args) {
        Person a = new Person();
        Student b = new Student();
        System.out.println(a instanceof Person); //true
        System.out.println(a instanceof Student); //false
        System.out.println(b instanceof Person); //true
        System.out.println(b instanceof Student);//true
    }
}
对象转型2
class Person {
    String name;
    int age;
    Person(String name){
        this.name=name;
    }
}
class Student extends Person {
    int grade;
    Student(String name,int grade){
        super(name);
        this.grade=grade;
    }
}
public class ins {
    public static void main(String[] args) {
        Person a = new Person("父类对象");
        Student b = new Student("子类对象",97);
        test(a);//打印传入的是一个普通person
        test(b);//打印成绩,传入的是一个学生
    }

    public static void test(Person p){
        if(p instanceof Student){
            Student a=(Student)p;
            System.out.println(a.grade);
            System.out.println("传入的是一个学生");
        }
        else
        {
            System.out.println("传入的是一个普通person");
        }
    }

}
多态=动态绑定

执行期间,根据时间的类型调用相应的方法。

1.必须有继承关系

2.必须有重写

3.必须父类引用 指向 子类对象

举个例子:

class Person {
    String name;
    int age;
    Person(String name){
        this.name=name;
    }

    public void run(){
        System.out.println("人在跑");
    }
}

class Student extends Person {
    int grade;
    Student(String name,int grade){
        super(name);
        this.grade=grade;
    }
    public void run(){
        System.out.println("学生在跑");
    }
}


class Teacher extends Person {
    String kemu;
    Teacher(String name,String kemu){
        super(name);
        this.kemu=kemu;
    }
    public void run(){
        System.out.println("老师在跑");
    }
}

class School{
    String xuexiaoname;
    School(String name){
        this.xuexiaoname=name;
    }
    public void studentRun(Person s){
        System.out.println(this.xuexiaoname);
        s.run();
    }
}


public class duotai {
    public static void main(String[] args) {
        Student a=new Student("小茗同学",99);
        Teacher b=new Teacher("王芳老师","教化学的");
        School c=new School("希望小学");

        c.studentRun(a);  //打印:希望小学 学生在跑
        c.studentRun(b);//打印:希望小学 老师在跑
    }

}
抽象类

关键词:abstract

一个方法现目前不用实现,但需要定义出来,就用abstract修饰。

修饰以后,这个类必须加上abstract

类加上abstract以后,凡是继承这个类,子类都必须重写这个abstract方法。除非是另一个Abstract类继承他,就不用了重写,当然,要重写也是可以的。

抽象类就是残缺的类,不能被实例化出来。

抽象类里面可以没有抽象方法

抽象类就算里面没有抽象方法,也一样不能被实例化。

抽象类里面可以有方法的实现,子类可以通过super调用这个实现的方法。

final

修饰变量,那么这个变量的值再也不会改变。

可以在函数传参括号里面用final,局部变量不变 public void func(final int i){}

修饰方法,那么这个方法不能被重写

修饰类,那么这个类不能被继承

interface

接口 是抽象方法和常量值定义 的集合。

接口里的声明的属性默认是public static final ,也只能是他。可以不写出来!

接口里的定义的方法都是abstract,也只能是他。可以不写出来!

接口里的定义的抽象方法是默认public,也只能是他。可以不写出来!

接口里面不能写完整的方法出来。

接口 可以多重实现。

一个类实现这个接口,那么接口里面所有的方法都必须实现。

实现的时候必须加public!

interface A {
     void testjiekou();
}

class B implements A
     public void testjiekou(){
        System.out.println("实现接口!");
    }
}


public class jiekoutest {
    public static void main(String[] args) {
        B b =new B();
        b.testjiekou();
    }
}

多重实现,多态性:

interface A {
    void eat();
}

interface B {
    void sing();
}

class C implements A, B {
    public void eat() {
        System.out.println("实现A的eat接口!");
    }

    public void sing() {
        System.out.println("实现B的sing接口!");
    }
}


public class jiekoutest {
    public static void main(String[] args) {
        A a = new C();
        a.eat();//a只能看到eat接口
        C c = (C) a;//向下转型一下
        c.sing();//就能看到sing接口了
    }
}

异常

运行期的错误。

try尝试 catch 捕获 throw抛出

异常有很多类型,他们会被抛出来,然后我们捕获这些异常,进行相应的处理,比如,提示成中文什么的。

简单例子:

   public static void main(String[] args) {
        try {
            int a = 4 / 0;
        }
        catch (ArithmeticException e){
            System.out.println("被除数不能为0");
            System.out.println(e);
           //java.lang.ArithmeticException: / by zero
            
            e.printStackTrace();//这个还可以显示行数
        }
    }

image-20200928134441729

声明类时,throws可能抛出的异常

在方法中就判断什么时候throw出这个异常

image-20200928134818071

finally:

无论如何都会执行,

用来进行资源的清除工作。比如:把打开的文件关闭掉。

如果继承一个类,父类有个方法throws异常,那么子类在重写这个方法时只能throws相同的异常或者干脆不抛出异常。

image-20200928163043990

在try catch时,这个catch的东西一定是先小后大。

自定义异常:

写个类,继承Exception,构造函数时写spuer(message):

class MyException extends Exception {
    private int id;
    public MyException (string message,int id){
        super (message) ;
        this.id = id;
    public int getid(){
        return id;
}

然后在另一个类的方法中直接throws这个异常,满足异常条件就throw new 这个异常并传入参数。

image-20200928162942224

一维数组

声明方式和赋值方式:

int[] a={3,4,5,6};

int b[]={5,4,5,9,8};

double[] c=new double[10];

for(int i=0;i<c.length;i++){
	c[i]=i+0.1;
}

内存分布:

int数组:

image-20200928163640039

引用数组:

image-20200928163659744

动态初始化:数组定义 与 元素分配空间和赋值 分开操作

image-20200928164003833

静态初始化:数组定义 与 元素分配空间和赋值 同时进行

image-20200928164026637

对象排序

package com.ufo.five;

class Date  {
    int year;
    int month;
    int day;

    @Override
    public String toString() {
        return "Date{" +
                "year=" + year +
                ", month=" + month +
                ", day=" + day +
                '}';
    }

    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public int compare(Date d) {
        return year > d.year ? 1
                : year < d.year ? -1
                : month > d.month ? 1
                : month < d.month ? -1
                : day > d.day ? 1
                : day < d.day ? -1 : 0;


    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }
}

public class datetest {


    public static void main(String[] args) {
        Date[] days =new Date[5];
        days[0]=new Date(2020,05,17);
        days[1]=new Date(2019,05,17);
        days[2]=new Date(2020,07,17);
        days[3]=new Date(2020,05,21);
        days[4]=new Date(2018,05,17);

        Date[] b=sortDate(days);
        for(Date bb:b){
            System.out.println(bb.toString());
        }
    }


    public static Date[] sortDate(Date[] a) {
        int len = a.length;
        for (int i = 0; i < len; i++) {
            for (int j = i+1; j < len-1; j++) {
                if (a[i].compare(a[j]) > 0) {
                    Date tp = a[i];
                    a[i] = a[j];
                    a[j] = tp;

                }
            }
        }
        return a;
    }
}

结果:

image-20200928170736977

数三退出游戏

500个小朋友手拉手围成圈,按123123123报数,数到三的小朋友自动退出,求最后一个活下来的小朋友最开始的位置。

package com.ufo.five;

public class quit3 {
    public static void main(String[] args) {
        boolean a[] = new boolean[500];
        for (int i = 0; i < a.length; i++) {
            a[i] = true;
        }
        int leftcount = a.length;
        int countNum = 0;
        int index = 0;
        while (leftcount > 1) {
            if (a[index] == true) {
                countNum++;
                if (countNum == 3) {
                    countNum = 0;
                    a[index] = false;
                    leftcount--;
                }
            }
            index++;
            if (index == a.length) {
                index = 0;
            }
        }

       
        for (int i = 0; i < a.length; i++) {
            if (a[i] == true) {
                System.out.println(i);
            }
        }


    }
}
//答案435
二维数组

image-20200928205348863

System.arrarycopy(数组1,开始位置,数组2,开始位置,复制长度)

image-20200928205545733

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值