java 学习笔记(一)--安装、java分类、跨平台、变异过程、jre和jdk、基础知识简介、数据类型

676 阅读10分钟

1.安装目录说明

image.png

2.java 的分类

JAVA是一门编程语言,分为三大版本,分别是javase、javame、javaee。

  1. JavaSE标准版 即Java标准版,主要用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。例如,Java应用程序开发平台Eclipse。

  2. JavaEE企业版 是在JavaSE的基础上构建的,用来开发B/S架构软件,即开发企业级应用,主要针对企业应用的开发。例如,电子商务网站、ERP系统(企业资源管理系统)。

  • JavaEE在JavaSE的基础进行了扩展,增加了一些更加便捷的应用框架。比如我们现在常用的Java开发三大框架Spring、Struts和Hibernate,我们可以应用这些框架轻松写出企业级的应用软件。
  • Java EE也可以说是一个框架也是一种规范,说它是框架是因为它包含了很多我们开发时用到的组件,例如:Servlet,EJB,JSP,JSTL等;说它是规范因为我们开发web应用常会用到的一些规范模式,JavaEE提供了很多规范的接口却不实现,将这些接口的具体实现细节转移到厂商身上,这样各家厂商推出的JavaEE产品虽然名称实现不同,但展现给外部使用的却是统一规范的接口。
  • 例如,我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展。当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担。为了程序的易维护性和可扩展性,这就需要我们使用JavaEE技术来进行项目开发。
  1. JavaME微型版 主要针对消费类电子设备的。它是一套运行专门为嵌入式设备设计的api接口规范,主要用于开发移动设备软件和嵌入式设备软件,例如:手机游戏,电视机顶盒和打印机相关的嵌入式设备软件、蜂窝电话和可视电话、数字机顶盒、汽车导航系统等等。

  2. 总结

  • JavaSE是Java的基础,主要针对桌面程序开发;
  • JavaEE是针对企业级应用开发;
  • JavaME是主要针对嵌入式设备软件开发。

3.跨平台原理

  1. 跨平台,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。

实现跨平台:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序。(注意不是能在所有的平台上运行,关键是该平台是否能安装相应的虚拟机)

2.其背后的原理是什么?

Java跨平台原理:

  • 由源文件(.java)—>字节码文件(.class)(二进制文件)-----> 解释---->Unix,Win,Linux等机器。

  • 而这一系列的步骤就是通过JVM (JAVA虚拟机) 来进行实现的。

  • 简单的来说, 就是当你需要执行某个Java程序时,会牵扯到JVM。具体就是我们编写的Java源码,编译后会生成一种.class文件,称为字节码文件。而Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码,然后运行。

image.png 注意:跨平台的是Java程序,而不是jvm,不同系统需要安装对应版本的JVM;

4. Java编译过程

Java文件编译过程包括两个阶段,

  • 第一阶段是在编译阶段编译成Java字节码的过程,有些书籍中叫前端编译器,如Oracle的javac编译器;
  • 第二阶段是在运行时,通过JVM的编译优化组件,对代码中的部分代码编译成本地代码,即JIT编译,如HotSpot中的C1、C2编译器。JVM整个编译过如下图所示。

image.png

5. JRE和JDK

JDK(Java Development Kit)和JRE(Java Runtime Environment)是Java开发和运行的核心组件,它们之间存在明显的区别。以下是对两者的详细比较:

  1. 定义与功能
  • JDK:

    • 定义:JDK是Java语言的软件开发工具包(Software Development Kit),它包含了Java的开发工具和运行环境。
    • 功能:JDK提供了编写、编译、调试Java程序所需的所有工具和资源。这些工具和资源包括Java编译器(javac)、Java运行时环境(JRE)、Java调试器(jdb)以及大量的Java类库等。JDK使得Java程序员能够开发、测试和部署Java应用程序。
  • JRE:

    • 定义:JRE(java Rountime Environment)是Java程序的运行环境,它提供了运行Java程序所需的基础设施。
    • 功能:JRE包含了Java虚拟机(JVM)和Java核心类库,这些组件共同为Java程序提供了一个运行时环境。用户无需了解Java程序的编译过程,只需在安装了JRE的计算机上即可运行Java程序。
  1. 组件与结构
  • JDK:

    • 核心组件:JDK不仅包含了JRE(即Java虚拟机、核心类库等),还包含了Java编译器(javac)、Java文档生成工具(javadoc)、Java调试器(jdb)等开发工具。
    • 结构:JDK = JRE + 开发工具集。
  • JRE:

  • 核心组件:JRE主要由Java虚拟机(JVM)和Java核心类库组成。

  • 结构:JRE = JVM + Java核心类库 + 其他支持文件。

  1. 面向对象与用途
  • JDK:

面向对象:JDK主要面向Java开发人员,是开发Java应用程序的必备工具。 用途:用于编写、编译和调试Java代码,以及进行相关的开发任务。

  • JRE:

面向对象:JRE主要面向普通用户或Java程序的使用者,他们不需要进行Java程序的开发或调试,只需运行Java程序即可。 用途:用于执行Java应用程序,而不涉及Java代码的编译。

image.png

6.基础知识

  1. hello world image.png
package cn.java.day01;
public class T1 {//外层框架
    //    main函数是java程序的入口,无论java程序有多么复杂,都是从main函数第一行开始执行的
    public static void main(String[] args) {//内层框架
        System.out.println("hello java");
    }

}

image.png 字节码文件只有java虚拟机才能读懂

2、 转义符 转义字符是一些有特殊意义的字符,用来表示常见的不能显示的字符,如表示换行。

所有转义字符和它们所对应的意义如下表所示:

image.png 3. 快捷代码

psvm 快速创建内容框架的代码模版

image.png

image.png

自动代码

image.png

image.png

image.png

image.png

image.png

Idea快速选中一行的四种方式

一、鼠标连续点三下

二、end键将光标移到行尾 , ctrl+w 选中行

三、end键将光标移到行尾 , shift + home 选中行

四、home 键 光标移到行首、然后 点击shift +end

7.Java数据类型(八种基本数据类型 + 四种引用数据类型)

1、位(bit): 又名 比特位,表示二进制位,是计算中内部数据储存的最小单位。一个二进制位只能表示0和1两种状态。

2、字节(byte): 是计算机中处理数据的基本单位。一个字节等于八位(1Byte = 8bit)

3、字(word): 计算机进行数据处理时,一次存取、加工和传送的数据长度。在常见的计算机编码格式下,一个字等于两个字节(十六位)(1word = 2Byte = 16bit)

  1. JAVA中的数据类型分为两大类:

1、基本数据类型:整型、浮点型、字符型、布尔型

  • 整数类型 —— byte、short、int、long,
  • 浮点类型 —— float、double
  • 字符类型 —— char
  • 布尔类型 —— boolean

package cn.java.day01;

public class T02 {
    public static void main(String[] args) {
//        java 中常用数据类型
        int num = 3;
//        双精度保存浮点数,保存小数
        double height = 1.77;
//       性别
        char gender = '男';
//        字符串 ""
        String name = "张三";
//        常量:其值不可以改变的量,常量·一旦定义后序不可以更改他的值
//        常量名通常大写,通常定义时既对其进行初始化
        final double Pi = 3.14;
    }
}

1.基本数据类型(八种):

image.png

image.png Java的八种基本类型:(按字节来分)

boolean   布尔型   1个字节 8bit(8位)

byte     字节类型   1个字节

char     字符类型   2个字节

short     短整型     2个字节

int          整型        4个字节

float      浮点型(单精度)4个字节

long      长整型      8个字节

double   双精度类型  8个字节

Java中默认的整数类型是int,如果要定义为long ,则要在数值后加上L或者l

默认的浮点型是双精度浮点,如果要定义float,则要在数值后面加上f或者F

一个字节等于8位,1个字节等于256个数。2^8

一个英文字母或者阿拉伯数字占一个字节

一个汉字占2个字节

2、引用数据类型:

  • 接口(interface)、数组([ ])、类(class)。

引用数据类型是建立在八大基本数据类型基础之上,

  • 包括数组、接口、类。引用数据类型是由用户自定义,用来限制其他数据类型。
  • 简单的说,除八大基本类型之外的所有数据类型,都为引用数据类型。
    所有引用类型的默认值都为 null 。

二、数据类型转换: 转化从低级到高级:byte,short,char(三者同级)—> int —> long—> float —> double

package cn.java.day01;

public class T03 {
    public static void main(String[] args) {
//        类型转换
//        自动类型转换
        double num1 = 1.2;
        int num2 = 3;
//        小数和整数相加时,先整数隐式的转成小数,最后在相加
        double res=num1+num2;

//        强制转换的大前提是类型相容
        double num=5.33;
        int num3=(int)num;
        System.out.println(num3);//5
    }
}
  • 1、低级转换高级:自动类型转换
  • 2、高级转换低级:强制类型转换

注意事项

  • 1、强制类型转换过程中可能造成数据丢失;
  • 2、强制类型转换时要在需要转换的数据类型前加上 ()。

8. Scanner 扫描仪

首先,我们通过import语句导入java.util.Scannerimport是导入某个类的语句,必须放到Java源代码的开头,后面我们在Java的package中会详细讲解如何使用import

然后,创建Scanner对象并传入System.inSystem.out代表标准输出流,而System.in代表标准输入流。直接使用System.in读取用户输入虽然是可以的,但需要更复杂的代码,而通过Scanner就可以简化后续的代码。

有了Scanner对象后,要读取用户输入的字符串,使用scanner.nextLine(),要读取用户输入的整数,使用scanner.nextInt()Scanner会自动转换数据类型,因此不必手动转换。


package cn.java.day01;
//引入Scanner包

import java.util.Scanner;

public class T04 {
    public static void main(String[] args) {
//        创建一个扫描仪对象
        Scanner input = new Scanner(System.in);
//        进行接收操作
        int val = input.nextInt();//输入整数
        System.out.println("您刚才输入的数字是" + val);
        Scanner inpu1 = new Scanner(System.in);
        char ch = inpu1.next().charAt(0);//下标为0代表第一个字符 charAt
//        小写字母转成大写字母,小写字母比大写字母多32,所以要减32,存在自动类型转换,需要将char类型的ch转成
//        数字,转好之后,在减32,最后在强制类型转换
        char bigch = (char) (ch - 32);
        System.out.println(bigch);
    }
}

练习案例:求水仙花数


package cn.java.day01;

public class T06 {
    public static void main(String[] args) {
//       求水仙花数
        for (int i = 100; i < 1000; i++) {
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100;
            if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
//                证明是水仙花数
                System.out.println(i);//153,370,371,407
            }
        }
    }
}