• java基础知识


    目录

    计算机语言发展史

    java前言

    java语言平台版本

    三种java版本之间的关系 

    JDK、JRE、JVM

    三者关系图解

    JDK、JRE、JVM解释: 

    JDK、JRE、JVM作用 

    java跨平台 

    C语言跨平台原理

    C语言跨平台和java跨平台区别

    关于java内的文件

    .java文件运行原理

    java注释

    注释的作用

    注释分类 

    标识符

    定义

    标识符原则

    关于标识符细节

    变量

    定义变量的两种格式:

    final关键字 

    变量分类

    局部变量

    全局变量

    成员变量和局部变量的区别

    常量 

    常量分类

    java数据类型

    8大基本数据类型

    数据据类型的默认值

    关于数据类型注意事项

    进制前缀

    浮点数的两种形式

    字符类型

    转义字符

    引用数据类型

    数据类型的类型转换

    转换规则

    运算规则

    常用的java代码

    运算符

    前言

    算数运算符

    位运算符

    逻辑运算符与位运算符(&、|、^)

    按位运算 

    比较运算符

    ​编辑逻辑运算符

     逻辑运算符实验

    三目运算符

    赋值运算符 

    优先级控制

    计算机语言发展史

    java前言

    java之父:詹姆斯•高斯林(James Gosling)

    java语言平台版本

    JAVASE — Standard Edition—标准版/基础版

    定位于个人计算机上的应用,这个版本是java平台的核心,他提供非常丰富的api来开发一般个人计算机上的应用程序,包括用户界面接口awt及swing,网络功能与国际化,图像处理能力以及输出支持等,在上个世纪90年代末互联网上大放异彩的applet也属于这个版本。applet后来被flash取代,flash即将被html5取代

    JAVAEE — Enterprise Edition— 企业版/商务版

    定位在服务端的应用,javaee是javase的扩展,增加用于服务器开发的类库。如:JDBC是让程序员直接在java内使用的sql语法来访问数据库的数据,servlet能够延申服务器的功能,通过请求-响应的模式来处理客户端的请求;jsp是一种可以将java程序代码内嵌在网页上的技术

    JAVAME — Micro Edition — 微型版/移动版

    定位在消费性能电子产品的应用上,javame是javase的内申,包含javase的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。该版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型的产品能够增加支持的能力

    三种java版本之间的关系 

    Java语言特性简单性、安全性、面向对象、高性能、编译性、解释性、分布式处理、健壮性、开源、跨平台 

    JDK、JRE、JVM

    三者关系图解

    JDK JRE JVM关系

    三者关系:JDK>JRE>JVM(三者是包含关系) 

    JDK、JRE、JVM解释: 

    • JDK:Java Development Kit(java开发工具套件)
    • JRE:Java Runtime Environment(java运行环境)
    • JVM:Java Virtual Machine(Java虚拟机)

    JDK、JRE、JVM作用 

    • JDK:JDK是java语言软件开发工具包,主要用于移动设备,嵌入式设备上的Java应用程序,编写java必须使用JDK,他提供编译和运行Java程序的环境,是整个java开发的核心 
    • JRE:java运行的环境
    • JVM:将字节码文件翻译成当前平台认识的可执行文件格式

    java跨平台 

    JVM跨平台

    由上面观之Java跨平台前提:安装对应的JVM

    java是一门解释性的语言:jvm将字节码文件一行一行的解释为当前操作系统可执行文件格式。

    C语言跨平台原理

    注意:编译后产生的可执行文件可以在对应的平台上运行(一般vs2019包含编译器与链接器) 

    C语言跨平台和java跨平台区别

    • java的字节码文件是和平台无关的,拿着这个字节码文件到不同的平台上去运行
    • C语言不同的平台有不同的编译器,编译器与平台相关的,编译后的可执行文件也和平台相关 

    注意:C语言相对java来说效率高,因为他产生的可执行文件可以直接在平台上运行,不用解释和翻译 

    关于java内的文件

    • 源文件:.java文件
    • 字节码文件:.class文件
    • 编译环节所对应的文件:javac.exe
    • 运行环节所对应的文件:java.exe

    .java文件运行原理

    .java文件(javac.exe)=>.class文件(java.exe)=>jvm运行.class得到结果

    java注释

    注释的作用

    1. 屏蔽代码
    2. 解释说明

    注释分类 

    注释名称注释内容
    单行注释//
    多行注释/*……*/
    文档注释/**……*/

    注意:

    • 多行注释内容不能用于生成一个开发者文档,而使用文档注释内容可以生成一个开发者文档
    • 一般文档注释可以配合jdk提供的工具javadoc.exe来一起使用,通过javadoc.exe可以对文档注释进行解析,生成一套网页文件形式体现该程序的说明文档
    • 如果一个类需要使用javadoc工具生成一个软件开发者文档,那么该类必须经过public修饰
    • 文档注释注释的内容一般都是位于类或方法上面的

    标识符

    定义

    标识符:标识符可以简单的理解成一个名字。

    在Java中,我们需要给代码中的很多元素起名,包括类名、方法名、字段名、变量名等等。我们给对应元素起的名称就被称为标识符

    标识符原则

    1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符
    2. 不能以数字开头。
    3. 标识符严格区分大小写。
    4. 要做到见名知意。
    5. 标识符不能是Java的关键字

    在这里插入图片描述

    注意:除了上述的50个关键字以外,true,false,null也不可以被用作标识符 

    关于标识符细节

    1. 类名:首字母大写,其余遵循驼峰命名
    2. 方法名:首字母小写,其余遵循驼峰命名
    3. 包名:全部小写,不遵循驼峰命名 

    变量

    变量:数据的值是不固定的,总在变的量

    语法:变量类型 变量名 = 变量值 ;

    定义变量的两种格式:

    1. //声明变量时赋值
    2. int num=18;
    3. //先声明变量,再赋值
    4. String str; str="hello world";

    注意:

    1. 变量名必须是一个有效的标识符
    2. 变量名不能重复
    3. 声明变量前要定义类型
    4. 变量的值可以更改

    变量的使用原则:就近原则(离自己最近的变量会生效)

    变量本质上是在内存中申请一块内存空间(申请内存空间的大小取决于变量的类型),这块内存空间用变量名来表示,而这块内存里存储的是变量的值 

    final关键字 

    1. final double a=34;
    2. double b=78;
    3. System.out.println(a+"\t"+b);
    4. b=67;//成功
    5. a=45;//报错

    注意:一个变量被final修饰,那么这个变量就变成了常量,这里的值便不可修改 

    变量分类

    局部变量

    位置:定义在方法里或者方法的声明上
    注意:必须手动初始化来分配内存.如:int i = 5;或者int i; i = 5;

    作用域:整个方法的内部
    生命周期:随着方法的调用而存在,方法运行完毕就释放了

    全局变量

    位置:定义在类里方法外
    注意:不用初始化,也会自动被初始化成默认值

    作用域:整个类的内部
    生命周期:整个类中,类消失了,成员变量才会释放

    成员变量和局部变量的区别

    在这里插入图片描述

    常量 

    常量:在程序运行过程中,值一直不会改变的量成为常量。

    常量分类

    java数据类型

    8大基本数据类型

    八大基本类型速查表

    数据据类型的默认值

    类型默认值
    整数型0
    浮点型0.0
    字符型'\u0000'(空格)
    布尔型false
    引用类型null

    关于数据类型注意事项

    1. 我们只要写一个整数,就默认是int类型
    2. 我们只要写一个小数,就默认是double类型
    3. byte,short,char三种比int小的整数可以用范围内的值直接赋值
    4. 加了字面值后缀就表示此值是特定的类型
    5. 字面值后缀L——long、 D——double、F——float
    6. 浮点数类型不同,不要做值的比较
    1. int a=123456789012;//报错,因为超过int范围。不能放入a内存
    2. long a1=123456789012;//报错,因为123456789012为int类型,而此值超过int类型范围
    3. long a2=123456789012L;//正确,告诉了此值为long类型并且符和long类型范围,并且可以放入long内存
    4. long a3=12;//正确,说明此值为int类型可以放入long类型内存
    5. float nu3=3.14;//报错,因为3,14为double类型
    6. float nu4=3.14F;//正确

    进制前缀

    • 0b - 标识这是2进制 ,如:0b11
    • 0 - 标识这是8进制, 8进制是三位,如: 023
    • 0x - 标识这是16进制,如: 0x0001
    1. //默认10进制
    2. int a1=12;
    3. //16进制
    4. int a2=0x10;
    5. //二进制
    6. int a3=0b11;

    浮点数的两种形式

    • 十进制形式:3.14,314.0
    • 科学计数法形式: 314e2,314e-2(e大写小写都可以)
    1. //十进制形式
    2. double num1=3.14;
    3. //科学计数法象时
    4. double num2=314E-2;
    5. System.out.println(num1+"\t"+num2);

    字符类型

    字符常量: java中使用单引号来表示字符常量

    注意:

    • 字符在内存中占两个字节
    • char类型用来表示在unicode编码中的字符,Unicode编码被设计用来处理各种语言的文字,他表示两个字节,可允许有65536个字符
    • char类型保存的是该字符的ASCII码值,但是显示的是对应的字符

    转义字符

    1. char c='h';
    2. char c1='\n';
    3. char c2='i';
    4. //以字符的形式打印
    5. System.out.println(c);
    6. //不用拼接,因为多个char类型运算时会整型提升
    7. System.out.format("%c%c", c,c2);

    引用数据类型

    定义:除了基本类型以外的所有类型都是引用类型

    注意:引用类型是一个对象类型,它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。如:类,接口,数组

    数据类型的类型转换

    基本类型的类型转换

    注意:箭头开始的地方是小类型(容量小的类型),箭头指向的地方是大类型(这里的"大"和"小",指的是对应类型的取值范围,不是字节数)

    转换规则

    隐式转换:小类型到大类型直接转

    1. byte m = 120;
    2. int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
    3. float f = 3.2f; double d = f; //-->可以执行

    显示转换:大转小强制转,浮变整,小数没

    1. double a=3.2;
    2. int b=(int)a;
    3. System.out.println(b);//b=3

    注意:不能对boolean类型进行类型转换,并且boolean也不可以参与运算。

    运算规则

    1.计算结果的数据类型,与最大数据类型一致

    2.byte,short,char三种比int小的整数,运算时会先自动转换成int

    1. byte a=3;
    2. byte b=5;
    3. byte c=(byte)(a+b);//a+b会自动提升为int
    4. System.out.println(c);//c=8

    3.整数运算溢出

    整数运算溢出

    4.浮点数运算不精确——后面有解决办法

    5.浮点数的特殊值

    Infinity 无穷大 3.14/0

    NaN not a number 0/0.0 或 0.0/0

    常用的java代码

    1. import java.util.Scanner;
    2. public class Hello {
    3. //main主方法——程序的入口
    4. public static void main(String[] args) {
    5. //获取当前时间——返回值为时间戳
    6. long l = System.currentTimeMillis();
    7. //获取扫描器
    8. Scanner sc=new Scanner(System.in);
    9. //让扫描器扫描键盘输入int类型的数据
    10. int i = sc.nextInt();
    11. //让扫描器扫描键盘输入String类型的数据
    12. String s = new Scanner(System.in).nextLine();
    13. //输出后换行
    14. System.out.println("时间为"+l);
    15. //输出后以\n换行
    16. System.out.print("\n");
    17. //以特定格式输出
    18. System.out.format("%d--%s", i,s);
    19. }
    20. }

    运算符

    前言

    运算符:用于连接 表达式的操作数,并对操作数执行运算的符号。

    运算符类型:

    算术运算符、位运算符、比较运算符、逻辑运算符、三目运算符、赋值运算符。

    根据操作数来分类

    1. 单目运算符:只有一个操作数的运算符
    2. 双目运算符:有两个操作数的运算符
    3. 三目运算符:有三个操作数的运算符

    算数运算符

    自增自减运算符

    i++        i先参与运算        i=i+1

    ++i        i=i+1                  i参与运算 

    +号的作用

    1. 表示正数
    2. 表示相加操作
    3. 字符串的拼接

    注意:左右两侧的任意一侧有字符串,那么就是字符串拼接;结果就为字符串 

    1. System.out.println(+5);//5
    2. System.out.println(5+6);//11
    3. System.out.println(5+'6');//59——整形提升
    4. System.out.println(5+6+"7");//117
    5. System.out.println("hello"+888);//hello888

    位运算符

    逻辑运算符与位运算符(&、|、^)

    • 逻辑运算符:左右连接的是布尔类型的操作数
    • 位运算符:左右连接的是具体的数值

    按位运算 

    • &:同1为1
    • |:有1为1
    • ^:相同为0,相异为1
    • ~:对一个二进制数按位取反
    • <<:算数左移:移位过程左边舍弃,右边补零
    • >>:算数右移:移位过程右边丢弃,左边补符号位
    • <<<:逻辑左移:移位过程左边舍弃,右边补零
    • >>>:逻辑右移:移位过程右边丢弃,左边补零

    比较运算符

    逻辑运算符

    逻辑异或(^):相同为假,相异为真

    短路与:&&

    只要第一个操作数为false那么整个结果就为false,第二个操作数根本不用算(前提第一个为false)

    短路或:||

    只要第一个操作数为true那么结果就为true,第二个操作数根本不用算(前提第一个为true)

    注意:短路与或短路或相对于逻辑与或逻辑或效率更高

     逻辑运算符实验

    1. //&运算
    2. System.out.println(true&true);//true
    3. System.out.println(true&false);//false
    4. System.out.println(false&false);//false
    5. //|运算
    6. System.out.println(true|true);//true
    7. System.out.println(true|false);//true
    8. System.out.println(false|false);//false
    9. //!运算
    10. System.out.println(!true);//false
    11. System.out.println(!false);//true
    12. //异或^运算——同为假,异为真
    13. System.out.println(true^true);//false
    14. System.out.println(true^false);//true
    15. System.out.println(false^false);//false

    三目运算符

    语法:exp1?exp2:exp3

    注意:如果表达式1结果为true那么整个式子的结果就是表达式2的结果,否则是表达式3的结果

    1. int num=(5<7)?1:0;
    2. System.out.println(num);//1

    赋值运算符 

    a+=b和a=a+b的区别

    • a+=b:可读性稍差,编译效率高,底层自动进行类型转换
    • a=a+b:可读性好,编译效率低,手动进行类型转换
    1. byte a=10;
    2. int b=20;
    3. a+=b;//不报错
    4. a=(byte)(a+b);

    优先级控制

    当一个表达式包含多个运算符时,就需要考虑运算符的优先级,优先级高的运算符先参与运算,优先级低的运算符后参与运算。在实际的开发中,不需要特别去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号辅助进行优先级管理。

  • 相关阅读:
    留意差距:弥合网络安全基础设施的挑战
    i.MX 8M Plus-集成专用神经处理引擎(NPU)
    Java项目:SSM实现的在线农产品商城
    ubunu 18.04 LTS安装Qt-5.14-2并一起安装Qt Creator
    练习八-利用有限状态机进行时序逻辑的设计
    【算法&消费者行为】算法性能预期如何增强冲动性购买?—推文分享—2024-07-16
    Swin Transformer目标检测—训练自己数据集
    TensorFlow入门(十七、神经元的拟合原理)
    【Vue3+Ts】—— webpack打包其他资源学习笔记(二)
    GEE:使用中文做变量和函数名写GEE代码
  • 原文地址:https://blog.csdn.net/m0_60027772/article/details/125905353