JAVA知识点8(数组,抽象与接口,JDK.JRE.JVM,Object类equals)

第八章

一.JDK.JRE.JVM关系?

JDKJava开发工具包,是Sun Microsystems针对Java开发员的产品。
  JDK(包括了Java运行环境JRE、Java工具和Java基础类库。)中包含JRE(是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。)和JVM(Java虚拟机),在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。在这里插入图片描述
运行java程序只需要jre就可运行,而开发需要jdk.

二.Object类。

1.是所有Java的根基类,也就意味着所有的Java对象都拥有Object类的属性和方法。

2.equals
==是一个比较运算符,基本数据类型比较的是值,引用数据类型比较的是地址值。
(比较地址值即是指是否为同一个对象的引用)
equals()是一个方法,只能比较引用数据类型(String)。重写前比较的是地址值,重写后比一般是比较对象的属性。(若想比较新的引用数据类型,需自己重写equals方法)
在这里插入图片描述

三.数组

1.什么是数组?
是有序的元素序列,用于储存多个相同类型数据的集合,每个元素通过下标访问。

2.特点
2.1 长度必须确定,一旦创建,大小不可变。
2.2 元素必须是相同类型
2.3 数据类型可以是任何,包括引用数据类型。

3.数组声明但没赋值
char[] ch = new char[3];//默认空格
int [] Int = new int[2];//默认0
String[] strings = new String[2];//默认null
Byte x;//默认null

4.数组初始化方式
在这里插入图片描述
动态初始化:在每次创建对象时都要调用一次
静态初始化(静态初始化块只调用一次,是在类被第一次加载到内存时,并非要创建对象才执行。):
int[] a={8,9,10}; //写法一,声明一个长度为3的int类型数组,分别是8、9、10;
int[] a=new int[]{8,9,10}; //写法二(使用了边声明数组边赋值的方法,就不能在[]内定义长度。)

数组初始化都把空间分配好了,不会再改变。

5.数组的遍历
int[] a= {2,4,4,3};
for(int m:a)
System.out.println(m);

6.多维数组

7.实例:
Int[] gang={12};
Int[] ming=gang;
如果改了gang,ming也会跟着变,因为堆内存只有gang new出来的一个内存(数组A,B引用的相同数组)

8.三种数组复制方法:
1.通过for循环遍历
2.System.arraycopy(1.源数组,2.源数组复制起始位置,3目标数组,4目标数组起始位置,5复制的元素个数);
3.int[] arr=Arrays.copyOf(nums, nums.length);
// 与System.arraycopy相比此方法在原有基础上还可以扩容或者缩容,而System.arraycopy不能改变数组容量

9.数组排序:
Arrays.sort(nums);//只提供了升序排序的功能
如果想降序输出,用先排序好,再用for循环

四.抽象类

1.什么是抽象类?
是一个模版模式,为所有子类提供一个通用模版,子类可以在这个模版基础上进行扩展。(避免子类设计的随意性)
public abstract class text {
public abstract void run();//抽象方法
//有抽象方法的类应改为必然是抽象类
//抽象类可以包含属性、方法、构造方法,抽象方法不能有方法体。但构造方法不能用来new实例(即抽象类不能被实例化),只能用来被子类调用.
}

2.注意事项:
抽象类不能被直接实例化(不能用new),可以通过子类来实现实例化
抽象类只能用来继承
抽象类必须被子类实现
继承抽象方法必须重写,除非子类也是抽象方法
Abstract和final不能同时修饰类或方法S

五.接口

1.什么是接口?
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

2.接口特征
1) 属性都是公有静态常量
Int mun=100;
//编译成就变成
Public static final int MUN=100;
2) 所有方法都是公有抽象方法
Void abc();
Public abstract void abc();
3) 接口不允许有构造方法(因为不能被实例化,不能被继承,只能实现)抽象类可以被实例化,因为能被继承,子类可以被用到
4) 编写时如果该类继承父类,应先写extends再写implements实现接口
5) 接口也可以继承多接口

3.格式:
与定义类的class不同,接口定义时需要使用interface关键字。
public interface 接口名 {//可以将接口看做是只包含了功能声明的特殊类。
抽象方法1;
抽象方法2;
}
例子:
public interface MyInterFace {//接口中只有常量,抽象方法。接口默认修饰符:
String MAX_GEEAD=“boss”;
int MAX_GPEAD=120;//所有的接口 的 成员变量默认都是:puiblic static final
public void text01();//所有接口的 方法默认都是:public abstract
public void text02(int a,int b);
}

4. 类实现接口
类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。
其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能。
格式:
class 类 implements 接口 {
重写接口中方法
}
例子:
public class MyClass implements MyInterFace{
@Override
public void text02(int a, int b) {
}
@Override
public void text01() {
}
}

5.接口的多继承?
interface Fu1{
void show();
}
interface Fu2{
void show1();
}
interface Zi extends Fu1,Fu2{
void show3();
}

六.为什么需要接口?接口和抽象类的区别?

相同点:
 都位于继承的顶端,用于被其他类实现或继承;
 都不能直接实例化对象;
 都包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
 抽象类是这个事物中应该具备的内容, 继承体系是一种 is…a关系
 接口是这个事物中的额外内容,继承体系是一种 like…a关系

二者的选用:
 优先选用接口,尽量少用抽象类;
 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JDKJREJVMJava开发和运行环境中的重要组成部分。JDKJava Development Kit)是Java开发工具包,提供了开发Java应用程序所需的工具和库。JREJava Runtime Environment)是Java运行时环境,用于运行已经编译的Java应用程序。JVMJava Virtual Machine)是Java虚拟机,它是实际执行和运行Java字节码的虚拟计算机。 JDK包含了JRE,同时还包括了编译器、调试器和其他开发工具。它提供了开发Java应用程序所需的一切工具和资源。JDKJava开发人员必不可少的工具,因为它允许他们编写、编译和调试Java代码。 JRE是用于运行已经编译的Java应用程序的环境。它包含了Java虚拟机(JVM)和运行Java应用程序所需的类库和其他文件。JRE不包含开发工具,仅用于运行Java程序。对于普通的Java应用程序用户来说,只需要安装JRE即可。 JVMJava应用程序的执行引擎。它是一个虚拟计算机,能够在不同的操作系统上执行编译后的Java字节码。JVM解释和执行Java字节码,将其转换为特定操作系统可以执行的机器指令。JVM提供了Java应用程序的跨平台能力,使得Java应用程序可以在不同的操作系统上运行。 综上所述,JDK是开发Java应用程序的工具包,包含了JRE和其他开发工具;JRE是运行Java应用程序的环境,包含了JVM和运行所需的类库;JVMJava应用程序的执行引擎,负责解释和执行Java字节码。三者之间的关系可以简述为:JDK包含JREJRE包含JVM

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值