抽象类与接口的比较?构造方法,构造方法重载,什么是复制构造方法?求N的阶乘?Java环境搭建:JDK、JRE、JVM关系?MySQL事务并发三大问题,针对事务并发的问题、java接口详情

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 抽象类与接口的比较?构造方法,构造方法重载,什么是复制构造方法?求N的阶乘?Java环境搭建:JDK、JRE、JVM关系?抽象类与接口的比较

抽象类与接口的比较?构造方法,构造方法重载,什么是复制构造方法?求N的阶乘?Java环境搭建:JDK、JRE、JVM关系?

抽象类与接口的比较

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;
}

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);

}


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);

}


3、接口的作用就是把使用接口的人和实现接口的人分开,实现接口的人不必要关心谁去使用,而使用接口的人也不用关心实现的细节。

接口和继承也是实现面向对象特性之一:多态

其次接口与抽象类机制的重要性赋予了Java强大的面向对象

方便二次开发,维护性好,改起来方便–》来自它的定义:没有具体内容的方法,到某个类要使用的时候,在根据具体吧这些方法写出来。

然后还有安全性,严密性等其它优势。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
153 57
|
9天前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
15天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
46 6
|
1月前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
27 2
|
1月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
101 1
|
7天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
25 3
|
7天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
29 3
|
7天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
35 2
|
20天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
142 15
|
14天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。