美文网首页
抽象类与接口的比较?构造方法,构造方法重载,什么是复制构造方法?

抽象类与接口的比较?构造方法,构造方法重载,什么是复制构造方法?

作者: 学习微站 | 来源:发表于2022-10-24 07:46 被阅读0次

    CSDN话题挑战赛第2期
    参赛话题:Java微服务

    大家可分享关于Java微服务相关知识,包括但不限于Java微服务开发经验、架构组成、技术交流、中间件等内容,我们鼓励springcloud架构为基础发散出击,从而达到技术积累的目的,快来沉淀自己的技术,一起来分享吧! 你可以从以下几个方面着手(不强制),或者根据自己对话题主题的理解进行创作,参考如下:

    抽象类与接口的比较

    1、什么是抽象类?

    就是对类更高的抽象。抽象类作为多个子类的共同父类,可以理解为系统实现过程中的中间产品。这个中间产品已经实现了系统的部分功能,但不能当成最终产品,还需要进一步的完善。

    当父类的一些方法不能确定时,可以用abstract关键字来修饰改方法【抽象方法】,用abstract来修饰该类【抽象类】

    1)抽象类不能被实例化。

    2)用abstract关键字来修饰一个方法时,这个方法就是抽象方法,抽象方法不能有主体【即不能实现】;用abstract关键字来修饰一个类是,这个类就叫抽象类。

    3)抽象类不一定要包含abstract方法。也就是说抽象类可以没有abstract方法;但是一旦类包含了abstract方法,则这个类必须声明为abstract。

    2、什么是接口?

    接口是一种规范,接口就是多个应用程序的通信标准。接口就是给出一些没有内容的方法,封装在一起,到某个类要使用的时候,在根据具体情况吧这些方法写出来。

    1)接口中的所有方法都不能有主体,不能被实例化。

    2)一个类可以实现多个接口。

    3)接口中可以有变量【但是变量不能用private和protected修饰】

    a、Java接口中的变量是public,static,final,

    b、接口中的变量,本质上都是static的,不管你加不加static修饰

    c、在Java开发中,我们经常用的是变量,定义在接口中,作为全局变量使用。

    4)一个接口不能继承其它的类,但是可以继承别的接口。

    5)接口没有方法就可以作为一个标志,比如可序列化的接口Serializable,没有方法的接口称为空接口。

    抽象类与接口的比较

    接口和抽象类都不能实例化,他们都位于继承树的顶端,用于被其他类实现和继承。接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法

    区别:

    1、属性:接口没有普通属性,只有静态属性,并且只能用public final static修饰。

    抽象类可以有普通属性,可以是静态属性。

    2、方法:接口中的方法都没有方法体并且都是默认使用public abstract修饰,不能

    定义静态方法。而抽象类可以有普通方法,也可以没有抽象方法,也可以定义静态方法。

    3、构造函数:接口中没有构造器,抽象类中可以有构造器,但是它不能用于new对象,而是用于子类电泳来初始化抽象类操作。

    4、初始化块:接口中不能包含初始化块,而抽象方法中可以包含初始块

    构造方法,构造方法重载,什么是复制构造方法?

    构造方法是类的一种特殊方法,它的主要作用是完成对新对象的初始化

    1、方法名和类名相同,没有返回值

    2、在创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的初始化

    3、普通方法可以与类名相同,和构造方法唯一的区别在于,构造方法没有返回值。

    4、定义类的时候,若没有自定义构造方法,则会有一个默认方法的无参的构造方法,若自定义了构造方法,则没有无参构造方法。

    5、构造方法不能被继承,构造方法只能别显示或者隐式地调用。

    6、子类的构造方法总是先调用父类的构造方法,如果子类

    求N的阶乘

    public static int getResult(int n){

    if(n<0){

    throw new ValudateException(“非法参数”);

    }

    if(n1 || n0){

    return 1;

    }

    return getResult(n-1)*n;

    }

    Java环境搭建:JDK、JRE、JVM关系

    JDK=JRE+开发工具集(例如Javac编译工具等)

    JRE=JVM+Java SE 标准类库

    自动类型提升

    byte/char/short–> int–> long–> float–> double

    特别的:当byte、char、short三种类型的变量做运算时,结果为int型

    byte a =1;

    int b=2;

    int c = a + b;

    ##String

    声明String,使用一对“ ”

    String可以和8种基本数据类型变量做运算,且运算只能是连接运算:+

    运算的结果仍然是String类型

    二进制—八进制—十六进制

    创建数组:

    public static void main(String[] args) {    //创建数组的第一种方法    int[] arr=new int[6];    int intValue=arr[5];    //System.out.println(intValue);    //创建数组的第二种方法    int[] x={1,2,3,4};    //System.out.println(x[1]);    //创建数组的第三种方法    int[] y= new int[]{1,2,3,4,5};    int m=0;    boolean length = isLength(m,y);    if(length){        System.out.println(y[m]);    }else{        System.err.println("数组标越界");    }    }//判断数组下标是否越界public static boolean isLength(int m,int arr[]){    boolean flag=false;    int length = arr.length;    if(m<length)        flag=true;    return flag;}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    MySQL事务并发三大问题,针对事务并发的问题

    事务并发三大问题

    脏读 不可重复读 幻读 都是读一致性问题

    1 脏读 当一个事务对数据进行修改,那修改还没有提交,但是另外一个事务访问了这个数据,但是这个数据并没有提交到数据库,读到了“脏数据”!!!

    事务a

    select * from account where id = 13

    事务b

    update account set age = 18 where id = 13

    事务a

    select * from account where 13

    ----》age = 18

    2 不可重复读(update,delete) 在一个事务内多次读同一数据,在第一个事务两次读时间之中,第二个事务中途修改导致,第一个事务读第一次和第二次的数据不太一样,这就是不可重复读。重复读的时候数据不一样,不知道取哪个,总有一个数据是错的。

    事务a

    select * from account where id = 13;

    事务b

    update account set age = 18 where id = 13;

    commit;

    事务a

    select * from account where 13;

    ----》age = 18

    3 幻读(insert) 在第一个事务访问数据两次,中途第二个事务来添加一条数据或者删除一条数据,造成第一次看有这条数据,第二次看没有这条数据。或者第一次看没有这条数据,第二次看有这条数据。

    事务a

    select * from account where age>18;

    事务b

    insert into account values(555,‘xiaojihe’,20);

    commit;

    事务a

    select * from account where age>18;

    ----->多个一条数据

    针对事务并发的问题,有一个SQL92 ANSI/ISO标准 隔离级别越低,事务请求的锁越少,效率越高,安全性越低。

    Read Uncommitted(未提交读):最低隔离级别,脏读、不可重复读、幻读都会导致。

    Read Committed(已提交读):解决脏读。(大部分数据库系统)

    Repeatable(可重复读):解决脏读、不可重复读。(InnoDB默认使用)

    Serializable(串行化):解决并发事务所有问题,不建议用,效率低。最高的隔离级别,完全服务ACID的隔离级别。

    ACID:原子性、一致性、隔离性、永久性

    java接口详情

    1、interface
    2、接口是一种规范,没有具体内容的方法,到某个类要使用的时候,在根据具体吧这些方法写出来。
    比如,dao层常用接口,service接口 下面是dao->IUserDao
    public interface IUserDao extends IBaseDao{ int batchDel(List ids);

    void deleteById(Integer id);SystemAdmin login(String username);Set getPerSetByUserId(Integer id);public void modifyPassword(User user);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    }

    3、接口的作用就是把使用接口的人和实现接口的人分开,实现接口的人不必要关心谁去使用,而使用接口的人也不用关心实现的细节。
    接口和继承也是实现面向对象特性之一:多态
    其次接口与抽象类机制的重要性赋予了Java强大的面向对象
    方便二次开发,维护性好,改起来方便–》来自它的定义:没有具体内容的方法,到某个类要使用的时候,在根据具体吧这些方法写出来。
    然后还有安全性,严密性等其它优势。
    1、interface
    2、接口是一种规范,没有具体内容的方法,到某个类要使用的时候,在根据具体吧这些方法写出来。
    比如,dao层常用接口,service接口 下面是dao->IUserDao
    public interface IUserDao extends IBaseDao{ int batchDel(Listids);

    void deleteById(Integer id);SystemAdmin login(String username);SetgetPerSetByUserId(Integer id);public void modifyPassword(User user);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    }

    3、接口的作用就是把使用接口的人和实现接口的人分开,实现接口的人不必要关心谁去使用,而使用接口的人也不用关心实现的细节。
    接口和继承也是实现面向对象特性之一:多态
    其次接口与抽象类机制的重要性赋予了Java强大的面向对象
    方便二次开发,维护性好,改起来方便–》来自它的定义:没有具体内容的方法,到某个类要使用的时候,在根据具体吧这些方法写出来。 然后还有安全性,严密性等其它优势。

    相关文章

      网友评论

          本文标题:抽象类与接口的比较?构造方法,构造方法重载,什么是复制构造方法?

          本文链接:https://www.haomeiwen.com/subject/jegwzrtx.html