华清远见重庆中心—后端基础阶段技术总结/个人总结

这篇博客总结了Java的历史、JDK的安装与版本切换、Java程序的运行过程、基本数据类型、运算符、条件语句和循环结构,强调了个人在学习过程中的逻辑思维锻炼和实践的重要性。
摘要由CSDN通过智能技术生成

Java概念

Java的历史

Oak(橡树)语言,由Green开发团队开发,主要用于微型嵌入式设备编程,第一次提出了开源协议 ,Java之父 詹姆斯.高斯林

发布时间

经历过Sun公司接手之后,最终由Oracle收购,1995年语言更名为Java,正式发布JDK1.0

1996年 Java(此时JDK1.2)应对发展需求

Java的分类

J2ME

微型嵌入式领域的编程(例如:塞班系统应用,但后来并没有普及)

J2SE

Java标准语法(这是学习Java开发体系的必备基础)

J2EE

企业级开发(使用Java语言开发服务器)

Java的变化

2006年 JDK1.6 开源所有的代码

(J2SE-->Java SE,J2ME-->Java ME,J2EE-->Java EE)

Java的定义

Java是一门跨平台、“半解释半编译”的“面向对象”语言。

什么是解释型语言

首先要了解两个概念:编译语言、解释语言

1、编译语言是指定文件,编译到指定位置,生成指定的二进制文件,特点:效率高、速度快 (C语言)

2、解释语言是指定文件,解释到任何位置,生成指定的二进制文件,特点:跨平台性好

JDK

JDK 全称是 Java Development Kits 的缩写,翻译过来为Java开发工具包

在JDK中有运行.java文件的虚拟机(解释器)

java的源文件 开发文件是以什么方式结尾 .java

虚拟机 解析 .java文件

虚拟机

指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统

比如:我们在电脑中用的手机模拟器,就是一个由软件模拟的虚拟机

在Java中的虚拟机,是指的专门为了解析.java文件存在的一种软件

虚拟机,英文为 Virtual Machine,而Java虚拟机被人成为JVM(即Java Virtual Machine)

JDK中除了虚拟机还有哪些内容

JRE: Java Runtime Envirment (Java运行时环境 ,运行.java文件的核心内容)

JDK 包含JRE,JRE中有JVM。

虚拟机运行 .java文件 的原理

Java11 之前

java命令:将.java文件编译成.class文件(这里的.class为字节码文件,机器是无法识别的)

javac命令:将.class文件解释成对应的二进制命令。

Java11 后

java命令:将.java文件直接解释成对应的二进制命令

所以我们既可以说Java是一门编译解释语言,也可以说是一门解释语言。(区别与编译语言)

JDK的安装

1、进入JDK的官网 找到JDK11 的下载地址,然后根据自己设备选择对应的版本(常用的电脑设备要注意32位的操作系统64位的操作系统)从Oracle官网下载。

2、选中对应的系统以及下载版本

3、下载完成,直接安装就可以

4、安装后,我们可以在控制台查看是否已经安装好

WIN+R启动运行窗口

在运行窗口中输入cmd,并回车"确认"

在命令提示符窗口中输入java -version

说明java环境已经安装完成。

JDK卸载

1、在windows搜索中,找到控制面板

2、双击打开控制面板,在右上角启用类别 ,选择程序 中的卸载程序选项

3、在卸载程序页面中查看需要卸载的JDK文件,并双击

4、卸载完成后可以查看安装路径,是否卸载干净。

JDK版本切换

1、启动运行窗口,并输入regedit

2、在注册表中 逐一打开 HKEY_LOCAL_MACHINE,SOFTWARE,JavaSoft

3、在Java Plug-in中修改主体版本即可。

Java程序的运行过程及代码理解

简单的Java程序的组成

public class Hello{
    public static void main(String[] args){
        System.out.println("你好,中国");
    }

}

代码理解

public 公共的,公有的(可以被其他文件访问)
class 类(java代码的主要组成部分)
static 静态的
void 没有返回值(方法)
main 方法的名称``
() 方法的形参
(形式参数) 简称形参
String[] 形参的类型
args 形参的名称

重点: 1、main方法是整个程序的入口 (一旦运行整个项目,main方法就会执行)
      2、如何在没有IDEA的情况下,运行.java
      JDK (Java Development Kits)java开发工具包
      1) 打开IDEA最底部的控制台 Terminal

运行过程

通过javac命令进行编译,生成同名的.class字节码文件,在虚拟机上解释该字节码文件运行。

变量

概念

一个可以装载”字面量“的容器

数据类型

数据类型 变量名称 = 数据值(字面量)

int a = 1;

变量的声明

数据类型 变量名称

int b;

变量的初始化

变量名称 = 数据值(字面量)

b = 2;

注意点

1、数据类型 要与数据值(字面量)保持一致

int c = "张三"; //编译错误

2、在方法内,如果一个变量仅仅只声明,那么它不可以被使用

(在方法内,一个变量需要被初始化后才能使用)

int m;
System.out.println(m); //错误代码演示,结果会报未初始化的错误

变量的相互赋值

int n1 = 1;
int n2 = n1;

变量的名称

规则(前、中后):1、变量名称的开头只能以_或$(¥ 人民币),英文字母 定义

2、变量名称的中间只能以_或$(¥ 人民币),英文字母,数字 定义

        int _admin;
        int $admin;
        int admin;
        int Admin;
        int ¥admin;
        int ad_min;
        int ad$min;
        int admin01;
        int ad01min;

标识符

概念

为 ”变量、类(接口)、方法“ 进行命名的符号

1、标识符的开头只能以_、$、字母

2、标识符的中间和结尾以_、$、字母、数字为主要内容

3、不能以关键字或者特殊字符命名,(长度、大小写、换行)

4、见名知意(对变量进行特殊的名称定义,会帮助我们或者其他开发者理解程序功能,翻译软件)

标识符常见的命名方式

1、驼峰法 我的苹果 ==> my apple ==> myApple MyApple

首写字母小写 :小驼峰法 主要用于变量、方法命名

首写字母大写 :大驼峰法 主要用于类 或者接口命名

2、下划线隔断法 我的苹果 ==> my_apple

关键字

50个常见关键字

Java 由C/C++

其中有5个常见的保留字:goto const (true,false,null)

goto const 已经被弃用 true,false,null 作为值的类型存在java中

数据类型

基本数据类型的表示方式

整数类型

byte short

int

        int a1 = 10; //十进制
        int a2 = 010; //八进制(逢八进一) 在数值前加0
        int a3 = 0x10; //十六进制(逢十六进一)在数值前加0x或者0X

long (数值后需要加上L或者l)

(默认类型是int)

浮点数类型

float (定义浮点数类型时,需要加上F或者f)

double (科学进制表示方式 E:10的多少次方)

(默认类型是double)

字符类型

char

只能用单引号,单引号中只有一个字符或者数字

        char c1 = 'a';
        char c2 = '国';
        char c3 = 65; //ASCII码 65是一个计算机编码,对应'A'
        char c4 = '\u0000';//Unicode编码,空

转义字符

具有特殊的格式意义的字符

\n 换行 \t 制表符 \r 回车

引用类型

System.out.println("Hello")//字符串

基本数据类型转化

大范围的数值类型 ==> 小范围的数据类型 :强制转化

小范围的数值类型 ==> 大范围的数据类型 :自动转化

数值范围大小

byte < short < int < long < float < double

基本数据类型转化的原因

数值之间表示数值范围的大小关系

运算符

算术运算符

加、减、乘、除、取余(求模)

注意点

两数相除:

1、两数都是整数类型,求整数商

2、两数任意一个是浮点数,求浮点数的商

数据类型表达式:

运算表达式的最终类型,由运算表达式中的最大类型来决定。

特殊运算符

++ (自加一)

b++ 将b的值先给左侧n,再进行自加一

int b=1;
int n=b++
System.out.println(n)

++b b先进行自加一,再赋值给左侧的m

int b=1;
int n= ++b
System.out.println(m)

-- (自减一)

--运算 与 ++运算规则是一致的

判断依据

看运算符在前,还是变量在前。

如果运算符在前,则先对值进行自加,再将值赋值给左侧

如果是变量在前,则先把值赋值给左侧,再自加。

表达式

1、例如:a-b; b++; ++b :注意表达式最终都是以结果形式显示

b(变量)的值,与b++,++b (表达式)的值是有区别的

++,--在变量”左侧“和“右侧”的区别

2、有运算符参与的运算公式

        //算数表达式
        int a = 2;
        int b = 1;
        System.out.println(a - b);

        //赋值表达式(赋值运算的优先等级最低,从右往左运算)
         a = 5 - b;
        System.out.println(a);

        //布尔表达式 (最终结果是boolean)
        System.out.println(a > b);

        //逻辑表达式 (结果是boolean)
        System.out.println(a > b && b != a);

拼接符

String a = "abc";
String b = "123";
System.out.println(a + b);

字符串拼接符的判断依据:+ 的任意一侧有字符串出现时,它就是拼接符

字符串拼接符 与普通的加减运算的优先级一致。

拼接符的使用会直接消耗内存,执行效率低。

赋值运算符

= 优先等级最低

比较运算符

== 等号

=== 恒等 引用数据类型

> , < , >= , <= ,!=

逻辑运算符

与 &&、&

或 ||、|

非 !

逻辑运算符的左右两侧,必须是布尔表达式

布尔表达式:表达式的值必须是true或者false(boolean类型)

        int a = 1;
        int b = 2;
        int c = 3;

        //与:一假即假 (当所有布尔表达式中有为false的条件,结果必然为false)
        System.out.println(a < b && b < c);//true 真
        System.out.println(a > b && b < c);//false 假
        System.out.println(a > b && b > c);//false 假

        //或:可能
        //比如:明天下雨,或打雷

        //或:一真即真(当所有布尔表达式中有为true的条件,结果必然为true)
        System.out.println(a < b || b < c);//true 真
        System.out.println(a > b || b < c);//true 真
        System.out.println(a > b || b > c);//false 假

        //非:!取相反的布尔表达式的值
        // 注意:非的一侧必须是布尔表达式。
        System.out.println(!(a > b));//true

位运算

        //二进制 (八进制,十六进制)
        // 二进制与十进制之间的转化

        //& 按位与 :二进制比较,对位都为1结果为1
        //| 按位或 :二进制比较,对位都为0结果为0
        System.out.println(3 & 7);
        System.out.println(3 | 7);

        //^ 异或: 二进制比较,对位不相同结果为1
        System.out.println(3 ^ 7);

        //了解:(乘除法)
        //~ 非位: 把所有二进制位取反(包含了符号位)
        System.out.println(~6);
        //移位运算

运算符的优先级

条件语句

if语句

格式:if(布尔表达式){ 执行语句 }

描述:如果布尔表达式成立,就会执行“执行语句”,否则直接跳过这一次判断

       //案例: 大于等于60分:成绩及格
        double score = 90;
        if(score >= 60){
            System.out.println("成绩及格");
        }
        System.out.println("结束");

if.....else语句

格式:if(布尔表达式){ 执行语句 }else{ 执行语句 }

描述:如果布尔表达式成立,就会执行if中的“执行语句”,否则执行else中的“执行语句”

        //案例:大于等于60分:成绩及格 小于60分:不及格
        double score = 90;
        if(score >= 60){
            System.out.println("成绩及格");
        }else{
            System.out.println("不及格");
        }

if...else if 语句

格式:if(布尔表达式){ 执行语句 }else if(布尔表达式){ 执行语句 }

描述:如果if中布尔表达式成立,就会执行if中的“执行语句”

如果else if中布尔表达式成立,就会执行else if中的“执行语句”

随着条件的增多,我们可以增加else if的数量。

        //案例:大于等于90 :优秀
        //     80~90:良好
        //     60~80:合格
        //     ~60:差
       double score = 90;
       if(score >= 90){
            System.out.println("优秀");
        }else if(score >= 80 && score < 90){//score < 90
            System.out.println("良好");
        }else if(score >= 60 && score < 80) {
           System.out.println("合格");
        }else if(score < 60){
            System.out.println("差");
        }

else if(布尔表达式)

else 对前面的条件取反条件 + if(布尔表达式的条件)

       double score = 90;        
       if(score >= 90){
            System.out.println("优秀");
        }else if(score >= 80){
            System.out.println("良好");
        }else if(score >= 60) {
            System.out.println("合格");
        }else{
            System.out.println("差");
        }

switch语句

switch语句格式:switch(数据值或变量){ case 值1:...; case 值2 :...;... }

注意

1、switch括号中一般是变量,变量需要指定特殊的数据类型(byte short int char String(Character))

switch不可以设置的类型有:long,double,float

2、有无break的情况(break 跳出(停止)switch语句),没有break情况,程序会继续往后执行。

3、关于if语句与switch的区别:switch不能判断范围条件.

4、default 除了case之外的其他条件,(default为了程序健壮性)

        int n = 2; //选择的数据变量
        switch (n){
            case 1:
                System.out.println("n为1");
                break;//通过break可以终止整个switch语句
            case 2:
                System.out.println("n为2");
                break;//通过break可以终止整个switch语句
            case 3:
                System.out.println("n为3");
                break;//通过break可以终止整个switch语句
            default://不存在前面所有条件的情况
                System.out.println("其它数字");
                break;
        }
        System.out.println("switch语句执行完成");

循环

for循环

for循环格式 for(初始化内容;结束循环条件;变化方式){...}

初始化内容:int i = 0

结束循环条件: i < 5 (布尔表达式)

变化方式: i++

        //举例:重复打印Hello World 50遍
        for(int i = 0; i < 50; i++){
            System.out.println(i);
        }

for循环用于,已知的循环次数。

while 循环

while循环格式 while(布尔表达式){ ... }

        int a = 1;
        while (a < 10){
            a++;
            System.out.println(a);
        }

while循环用于,结束条件(直到什么时候停止)。

do-while 循环

格式: do{ 执行代码 }while(布尔表达式);

        int a = 10;
        while(a < 10){
            a++;
            System.out.println(a);
        }

        int b = 10;
        do{
            b++;
            System.out.println(b);
        }while(b < 10);

while 和 do-while的区别

do-while 是先执行再判断 while是先判断再执行

break 和 continue关键字

break 在switch中,退出switch

break 在循环中出现,退出循环

        for(int i = 0; i < 10; i++){//循环次数,循环过程i的变化
            if(i == 5){
                break;//退出循环,后续程序将不再执行。
            }
            System.out.println(i);
        }

continue 在循环中出现,跳过本地循环,开始下一次循环(本质:continue 到 i++ 开始下一次循环)

        for(int i = 0; i < 10; i++){//循环次数,循环过程i的变化
            if(i == 5){
                continue;//阻止后续程序的执行,但不会退出循环。
            }
            System.out.println(i);
        }

循环的特殊结构

          //for死循环:循环没有结束条件
          for(int i = 0;;i++){}
          for(int i = 0;i < 5;){}
          for(;;){}
         //while死循环
          while(true){}

数组

简单定义将一类数据方到一个整体中

专业定义:将数据类型相同的数据,放到一个集合中

数组的定义方式

静态初始化

在构建数组时就给予初始化的值

数组类型: 数据类型[]、变量[]

数组初始化 {数组元素,数组元素,....}

        int[] a = {1,2,3};//1、数组有3个元素长度 2,里面的元素有哪些
        int b[] = {1,2,3};
动态初始化

先构建数组的对象,然后在逐一赋值初始化

基本格式: 数据类型[] 变量名 = new 数据类型[数组的长度]

 int[] c = new int[3];//数组有多长

数组元素

取出指定的数组元素:

数组元素都具有下标值,下标值从0开始

通过”数组变量[下标值]“将数组元素取出

 int[] a = {1,2,3};
 System.out.println(a[1]);

例如:数组a下标为1的元素是”2“

遍历数组

可以通过length这个属性(变量)获取数组的长度

        int[] a = {1,2,3};
        System.out.println(a.length);//3
        for(int i = 0; i < a.length; i++ ){//0~2
            System.out.println(a[i]);
        }
        //取出数组中的最后一个元素
        System.out.println(a[a.length - 1]);
        //将数组内容全部输出到打印语句 [I@5594a1b5地址
        //System.out.println(a);
        // 工具类 Arrays (java.util.Arrays)
        System.out.println(Arrays.toString(a));

数组空间

1)数组a的地址,指向了1,2,3元素所在的堆内存空间

2)而数组a的地址等于 1元素所在空间的地址。

3)1,2,3元素所在的堆内存空间的地址是连续的

 int[] a = {1,2,3};
 //对指定下标的数组元素赋值,可以直接修改该数组
 a[1] = 4;

动态初始化过程

new: 对象创建

虽然new int[3] 开辟了三个空间,但是空间中是有指定类型的默认值

       int[] b = new int[3];
        System.out.println(b[0]);//输出默认值0
        b[0] = 1;
        System.out.println(b[0]);

其他类型数组的默认值

        float[] n1 = new float[3];//默认值0.0
        char[] n2 = new char[3];
        System.out.println(n2[0]);//空字符
        boolean[] n3 = new boolean[3];
        System.out.println(n3[0]);//false
        //引用数据类型的默认值
        String[] n4 = new String[3];
        System.out.println(n4[0]);//null 空对象

数组复制

传统复制

        int[] a = {1,2,3,4,5,6};

        //问:如实现数组复制 从哪里开始复制(start),到哪里停止复制(end)
        //   数组 ===> 新的数组 (数组长度要确认) length = end - start + 1
        int start = 2;
        int end = 3;
        int[] b = new int[end-start+1];

        int m = 0;//b数组的下标
        for(int i = 0; i < a.length; i++){
            if(i >= start && i <= end){
                b[m] = a[i];
                m++;
            }
        }
        System.out.println(Arrays.toString(b));

简便复制

System.arraycopy

System.arraycopy(src,srcPos,dest,destPos,length)

src : 被复制的数组(从哪个数组复制)

srcPos : 从src的哪个下标开始复制

dest : 粘贴到的数组

destPos : 从dest的哪个下标开始粘贴

length : 复制的数据元素的长度

数组扩容

注意:数组本身在定义之后,不可以增减长度

传统扩容

简便扩容

Arrays.copyOf(src,length)

src:需要扩容的数组

length:扩容的长度

冒泡排序

        int[] a = {5,4,3,2,1};
        //通过推理,总共有a.length - 1 次排序
        for(int j = 0; j < a.length - 1; j++){
            //一次排序
            //1.考虑倒数的第二位元素结束: i < a.length - 1
            //a.length - 1 - j : 考虑到不用比较的次数
            for (int i = 0; i < a.length - 1 - j; i++){
                //2.前面的数和后面的数比较大小
                if(a[i] > a[i+1]){
                    //3.交换
                    int tmp;
                    tmp = a[i];
                    a[i] = a[i+1];
                    a[i+1] = tmp;
                }
            }
            System.out.println(Arrays.toString(a));
        }

        System.out.println(Arrays.toString(a));

二维数组

二维数组的元素是一维数组

定义方式

int[][] 数组名称

int[][] d = {a,b,c};
静态初始化
int[][] n1 = {{1,2,3},{3,4,5}};
动态初始化

理解方式一: new int[行][列]

理解方式二: new int[有几个一维数组][这些一维数组中有几个元素]

        int[][] n2 = new int[3][3];
        int[][] n3 = new int[3][];// = {[],[],[]};//元素是三个空的一维数组
特殊形式

每个元素中数组是不同的长度

int[][] n4 = {{1,2,3},{5},{6,7}};

二维数组的遍历

        for(int i = 0; i < n4.length; i++){
            for(int j = 0; j < n4[i].length; j++){
                System.out.println(n4[i][j]);
            }
        }

注意

数组的类型决定了元素是什么样的类型

本阶段个人心得总结

在以前大学的课程学过许多门程序语言,所以在有一定的程序语言的基础后,再来系统且细致的学习Java语言,感触颇多。明白在每个基础点,注意的是逻辑思维的锻炼,以前可能不是很注意的点,很可能就是容易出错的点。还有一方面是,自身有一定的前端基础且学得不错,所以对于后端知识以前学习就不太够,以至于在编程开发方面没有一个大致的范围的概念。最重要的一点还是不要心浮气躁,枯燥是代码,但有趣的是思维,不做没有感情的敲代码工具,编程开发的学习讲究的是扎实的基础和丰富的实践开发能力,不断坚持完成每天的小目标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值