【Java基础01】基础概述

本文介绍了Java的基础知识,包括JDK和JRE的区别,JVM在Java跨平台中的作用,以及对象的四种关系(依赖、关联、聚合、组合)。此外,还探讨了Java的三大特性(封装、继承、多态)以及八种基本类型和流程控制结构(if-else,switch,while,do-while,for)。
摘要由CSDN通过智能技术生成

【Java基础系列】
【Java基础01】基础概述
【Java基础02】常用类
【Java基础03】时间类
【Java基础04】异常
【Java基础05】枚举类
【Java基础06】泛型
【Java基础07】注解
【Java基础08】反射
【Java基础09】代理
【Java基础10】IO流

基础概述

文章概述:总结和描述Java基础中的对象关系、语言特性、基本类型、流程控制、依赖环境等。

一、JDK和JRE

JDK和JRE关系图

总结概述:JDK用于开发,是给开发人员用的,JRE 用于运行java程序,和JVM是给普通用户使用的。如果只是运行Java程序,可以只安装JRE,无序安装JDK。也就是说:使用JDK开发完成的java程序,交给JRE去运行。

JDK包含了JRE,JDK和JRE中都包含了JVM。JDK是JRE+Java的开发工具。JRE包含了JVM+Java语言的核心类库。

1.1 JDK

JDK(Java Development Kit):Java开发工具包,普通用户只需要安装 JRE来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序)。它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环境JRE,以及常用的Java基础类库等,是整个JAVA的核心。

下图是Java8中JDK的安装目录
在这里插入图片描述

db文件是一个先进的全事务处理的基于Java技术的数据库(jdk自带数据库db的使用)

include文件里面是Java和jvm交互用的头文件

jre为java运行环境

lib文件存放的是JDK工具命令的实际执行程序

1.2 JRE

JRE(Java Runtime Environment):Java运行环境,运行基于Java语言编写的程序所不可缺少的运行环境,用于解释执行Java的字节码文件。

JRE中包含了Java virtual machine(JVM),runtime class libraries(运行时类库)和Java application launcher(Java应用启动器),这些是运行Java程序的必要组件。与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。

下图是Java8中JRE的安装目录,里面有两个文件夹bin和lib。你可以认为bin里的就是JVM,lib中则是JVM工作所需要的类库,而JVM和lib和起来就称为JRE。
在这里插入图片描述

从JDK11开始,JDK和JRE都是在一起的,安装后默认是没有JRE的。如果需要JRE这个单独目录,可以在JDK目录下面去打开命令窗口,然后执行如下命令(win10执行这个生成JRE需要目录权限):

bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre

执行完之后就会生成JRE,但无论使用tomcat 还是eclipse,没有JRE文件夹实际上并不影响你的使用。

1.3 JVM

JVM(Java Virtual Machine):Java虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。

所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。

1.4 Java跨平台的原因

使用Java开发开发程序会被编译器编译成统一的与平台无关的字节码文件(.class),这些字节码文件只面向JVM。不同平台的JVM是不同的,但是他们向编译器提供了相同的接口,屏蔽了与具体操作系统相关的信息。

JVM是Java程序跨平台最核心的部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。其屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

1.5 JVM执行程序的过程

1、加载.class文件

所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。只有JVM还不能成功执行.class的类文件,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。

运行class文件,可以在命令行中输入 java 字节码文件名 ,此时启动了一个jvm,加载字节码文件名.class字节码文件到内存,然后jvm运行内存中的字节码指令。在IDE上就类似于点击运行按钮。

2、分配管理内存

3、执行垃圾回收

调用垃圾收集器进行垃圾回收

二、对象的四种关系

2.1 依赖

依赖关系:表示一个类依赖于另外的类的定义,而被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。

举例:Person类可以进行Car和House的购买,Person的购买,引用了Car,但是Person类中并没有Car的属性,只是通过buy()方法进行实现的。

依赖关系在Java语言中体现为局域变量,方法的形参或对静态方法的调用。

2.2 关联

关联关系:某个对象会长期的持有另一个对象的引用,而二者的关联往往也是相互的。关联的两个对象彼此间没有任何强制性的约束,只要二者同意,可以随时解除关系或是进行关联,被关联的对象还可以再被别的对象关联,所以关联是可以共享的。

关联关系一般使用成员变量来实现。

2.3 聚合

聚合关系:是关联关系中的一种,是强关联关系。聚合是整体和个体的关系,也是通过实例的变量实现。

举例:汽车类和引擎、车窗类,表示整体和部分的关系

关联关系中两个类处于同一层次上,在聚合关系中,两个类处于不平等层次上,一个代表整体、另一个代表部分。

2.4 组合

组合关系:是比聚合关系更强的关联关系。组合是整体和个体的关系,部分属于整体,整体不存在,则部分一定不存在;部分不存在整体依然可以生存。整体对象负责部分对象的生命周期管理。

三、三大特性

3.1 封装

封装:一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作

  1. 封装是实现面向对象的第一步,封装就是将数据或函数等集合在一个单元中
  2. 类具有封装性,类能够把数据和算法(操作数据的函数)组合在一起,构成一个不可分割的整体;
  3. 类具有信息隐藏的能力,它能够有效地把类的内部数据(即私有和受保护成员)隐藏起来,使外部函数只能通过类的公有成员才能访问类的内部数据,并且控制访问级别。

封装意义

  • 保护类中的成员,不让类以外的程序直接访问或修改,只能通过提供的公共接口访问(数据封装)
  • 隐藏方法(实现)细节,只要接口不变,内容的修改不会影响到外部的调用者(方法封装)
  • 用类实现封装,用封装来实现高内聚,低耦合

访问级别

public:public设置公有成员,让本类之外的其他函数能够通过公有成员,按照类允许的方法访问类的私有数据,起到数据保护的目的。

protected:通过protected设置保护成员,在封装中没什么用,通常在继承中使用,对于继承此类的子类或者位于同一个包的类而言,它是可以访问的。

private:使用private把不想让其他程序访问的数据或者函数设置成私有成员,可禁止其他程序对这些数据随意修改。

3.2 继承

继承:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。主要实现重用代码,提高开发效率。

  • 继承是在已有类的基础上创建新类的过程,已有类称为基类(父类),新类称为派生类(子类)
  • 派生类继承基类功能,且能够对基类的功能进行扩充、修改或重定义。
  • 派生类复用了基类的全体数据成员函数,具有从基类复制而来的数据成员成员函数(基类私有成员可被继承,但是无法被访问)
  • 派生类可以从一个或多个基类派生;有单继承多重继承
  • 继承可传递 如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。
  • 基类中的构造函数、析构函数、友元函数、静态数据成员、静态成员函数都不能被继承。基类中成员的访问方式只能决定派生类能否访问它们。

构造器:基类中的构造函数、析构函数、友元函数、静态数据成员、静态成员函数都不能被继承。调用父类的构造方法使用super()。

编译器会默认给子类调用父类的构造器,此调用存在前提:父类有默认构造器。如果父类没有默认构造器,我们就要必须显示的使用super()来调用父类构造器,否则编译器会报错:无法找到符合父类形式的构造器。

注意

1、父类变,子类就必须变。

2、继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。

3、继承是强耦合关系。

3.3 多态

多态:指不同对象接收到同一消息时会产生不同的行为(一个接口,多种方法)

多态的三个条件

  • 继承的存在(继承是多态的基础,没有继承就没有多态)
  • 子类重写父类的方法(多态下调用子类重写的方法)
  • 父类引用变量指向子类对象

实现多态方式:

  • 接口多态性
  • 继承多态性(普通类、抽象类)

多态意义

  • 可替换性:多态对已存在的代码具有可替换性
  • 可扩充性:多态对代码具有可扩充性。新增子类不会影响已存在类的各种性质。
  • 灵活性:多态在程序中体现了灵活多样的操作,提高了使用效率(重载函数,重写函数)
  • 简化性:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要

四、八种基本类型

八种基本类型为:byte(8位)、short(16位)、int(32位)、long(64位)、float(32位)、double(64位)、boolean、char

精度:-2^(n-1) — 2^(n-1) - 1

对应的包装类:Byte、Short、Integer、Long、Float、Double、Boolean、Character

五、流程控制

5.1 if esle

int a = 1;
if(a == 1) {
    System.out.println(1);
} else if (a == 2) {
    System.out.println(2);
} else {
    System.out.println("no");
}

5.2 switch

选择判断,每个判断需要使用break进行跳出,否则会继续向下内部执行,可以设置default进行默认匹配操作。

int a = 1;
switch (a) {
    case 1 :
        System.out.println(1);
        break;
    case 2 :
        System.out.println(2);
        break;
    default:
        System.out.println(-1);
        break;
}

5.3 while

while(条件),条件成立则进入循环,条件为true一直循环,条件为false或遇到break则跳出

Integer a = 10;
Boolean flag = Boolean.TRUE;
while (flag) {
    if (a<0) {
        flag = Boolean.FALSE;
        //break;
    }
    System.out.println(a);
    a--;
}

5.4 do while

do while,与while相似但是会首先进入执行体,后在进行判断。

Boolean flag = Boolean.FALSE;
do {
    System.out.println(1);
} while (flag);

5.5 for

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

``

5.4 do while

do while,与while相似但是会首先进入执行体,后在进行判断。

Boolean flag = Boolean.FALSE;
do {
    System.out.println(1);
} while (flag);

5.5 for

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值