来自许老师的宝藏秘籍-3

—————— Java基本类型的各种运算,你真的了解了么?


image-20210923212407362

Java 的基本类型分整型类型,浮点型类型和布尔类型三种

1.整数运算

2.比较操作符

​ 它的结果是boolean类型的值,包括:

  • 数字比较运算符:<, <=, > 和 >=
    • 小于,小于等于,大于,大于,大于等于
  • 数字相等运算符:== 和 !=
    • 等于,不等于

3.数字操作符

​ 它的结果是int或long类型的值。包括

  • 一元正负运算符:+ 和 -
    • 正,负
  • 乘法运算符:*, / 和 %
    • 乘,除,取模
  • 加法运算符:+ 和 -
    • 加,减
  • 递增运算符:++
    • 加一
  • 递减运算符:–
    • 减一
  • 有符合和无符号的移位操作符:<<,>> 和 >>>
    • <<:左移,低位补0,不区分正数负数。
    • ②:右移,正数右移,高位补0,负数右移,高位补1。
    • ③:无符号右移,高位补0,不区分正数负数。
  • 按位求补运算符:~
  • 整数按位运算符:&, ^ 和 |

4.转换运算符

​ Java 基本类型的精度高低顺序,从低到高的话,就是byte->short->char->int->long->float->double

​ 低精度的类型转高精度,Java 是怎么处理呢?

隐形转换

这种情况其实本质不会损失精度,因此 Java 会进行类型的自动转换,也叫隐式类型转换。

image-20210923213757165

image-20210923213911187

image-20210923213944506

image-20210923214048343

image-20210923214116114

image-20210923214202263

来自许老师的宝藏秘籍-2

————————图解Java程序的结构、变量和类型

一.目录

  • Java程序的结构
  • 变量和数据类型
    • 变量
    • 类型的种类和值
      • 基本类型
      • 引用类型

二.Java程序的结构

​ 学习一个新东⻄,建议先看它的结构,这样有了整体的认知之后,再去学习细节,就能更好的认识到每个细节点在整体中的位置和作用,可以更好的理解整体和局部之间的关系。比如现在学的是 Java 程序语言设计,它的表现形式就是 Java 代码。写一个能跑的 Java程序,那就需要写个 class,class 里要有个 main 方法,这样就构成了一个完整的 Java 程序。

​ 其实上篇提到的 HelloWorld 程序就是一个完整的 Java 程序,它由访问修饰符、类类型、类命名、main 方法、执行语句、花括号和注释这几个核心要素构成。image-20210923205053751

  • ​ 1.访问修饰符决定了被修饰对象的可访问范围,被修饰对象可以是类、变量和方法,访问范围的标识有 public、protected、缺省(缺省就是什么都不写,默认)和 private。
  • ​ 2.类类型表明当前类的类型,有class(普通类)、enum(枚举类)、interface(接口类)和@interface(注解类,自己写注解,不是生成注释)。类名是当前类的标识,通过它来区别其它类。命名的时候一般大写字母开头,可以是字母数字下划线的组合,不过最规范的是大写字母开头的驼峰式命名 。

​ 3.main 方法是 Java 程序必备的一个东⻄,它是 Java 程序的执行入口,声明也是固定的。执行语句就是我们要编写的程序逻辑了,每条语句都要用;(分号)结束。

​ 4.花括号{}代表了当前内容的作用域,它总是成对出现。比如HelloWorld后边的{}里的内容,就只影响到当前这个 class,main(String[] args)后边的{}里的内容,就只影响到当前这个 main方法。

​ 5.注释是对代码逻辑的解释,它不是写一个 Java 程序必备的,也不会被编译到字节码文件里。好的代码注释,是能够提升代码的可读性和可维护性的。

​ 注释有类注释(类头部位置)、方法注释(方法上面的)、行注释和多行注释。(类/方法注释——写法类似,但是方法注释一般有方法参数,方法返回值。类没有,但是类有其用途,作者,时间,版本等描述。)

三.变量和数据类型

1.变量

​ HelloWorld 程序一般用来辅助我们判断自己环境有没有配置好,如果 HelloWorld 能运行,就说明我们 Java 环境是好的,就可以专心编程和调试了。

​ 编程躲不开的一个概念就是变量。什么是变量呢?

​ 顾名思义,就是变化的量,这个概念起源于初中数学的代数,比如方程式中的 x和 y 都是变量,x 是自变量,y 是因变量,如果基于一定的规则,只要给定一个 x 的值,就一定能得到 y 的值。

​ 这非常契合编程的场景:给一个输入,运行一下程序,就能得到一个确定的输出。至于输出什么样的值,取决于这个程序要实现的功能以及给定输入的值。再来看下刚才那个方程式 :y=x+1,如果没有限定的话,x 其实可以是整数,也可以是小数,还可以是字符串。可是如果是个字符串,就无法按数学规则进行运算了。所以即便是方程式的场景,一般也会约定变量的一个类型,比如 x 是个整数。变量和数据类型变量MATLAB复制代码 y=x+11

​ 同样的,反映到 Java 里,Java 是一种静态类型语言,这意味着每个变量和每个表达式在编译时就需要知道类型。如果我们想定义一个变量 x,就需要指定一下它的类型,以便能够通过编译以及进行后续的运算。

​ 这也是 Java 变量的一个原则:先定义后使用,定义必须指定数据类型。

​ 比如较小的整数可以用byte num;表示。变量也可以做赋值操作,比如num = 10;就把 10 这个整数赋值给了 num 这个变量。

​ 另外,变量也支持传递,比如byte num2 = num;就是把 num 的值传递给num2。

image-20210923205846044

​ 在计算机上,CPU 负责计算,内存负责存储待计算的数据。上图中的方块可以理解成一块内存,你会发现它是一块一块的。这就是内存的基本单位——byte(字节)。一个字节是 8 bit(位),也就是一个字节能容纳二进制00000000~11111111所有的数字。我们的程序也是字节维度使用内存,而内存空间是有限的,就需要有指标能衡量待存储的数据大小,以避免内存超限而引起程序崩溃。

​ 因此,程序运行的时候,需要告诉内存,要申请多大的内存空间,也就是图里面会用多少个小方块,其次是存的值是什么,也就是图里面小方块里的值。我们的变量 num 就是申请了一个字节的空间,然后存了数字 10。

​ 如果 num 要用的值超过了一个字节的限度,我们就无法使用 byte 这个数据类型了,就需要定义一种新的数据类型来支撑

2.类型的种类和值

     在 Java 的世界里,有基本类型和引用类型两种。
     相应地,有两种数据值可以存储在变量中,作为参数传递,由方法返回,并对其进行操作: 原始值和引用值。

image-20210923210122098

​ 基本数据类型在 Java 里可分为布尔类型和数字类型两大类:

image-20210923210242671

  • ​ 布尔类型表达是或者否,只有true和flase两个值,用关键字boolean表示。但 JVM 没有针对boolean的字节码指令,因此在虚拟机规范里,boolean类型在编译后会被int代替,占用4 个字节,如果是 boolean 数组,会被编译成byte数组类型,每个boolean数组元素占 1 个字节。实际情况就取决于各厂商发布的 JVM 实现了。

​ 数字类型包括了整型类型和浮点类型。

  • ​ 整型类型根据取值范围的不同,细分成了byte、short、int、long和char五种,分别是 8 位、16 位、32 位、64 位有符号整数和 16 位无符号整数,分别占用一个字节、两个字节、四个字节、八个字节和两个字节的内存空间。

​ 整型类型的值是以下范围的整数:

  • byte: -128 到 127,包括边界值

  • short: -32768 到 32767,包括边界值

  • int: -2147483648 到 2147483647,包括边界值

  • long: -9223372036854775808 到 9223372036854775807,包括边界值

  • char: ‘\u0000’到‘\uffff’,包括边界值,也就是从 0 到 65535。char可表示标准的ASCII 或一个 Unicode 字符。

  • ​ ASCII 字符集占据 Unicode 字符集中的前 127 个值。

  • ​ 浮点数指小数,科学计数法表示的时候,小数点是可以“浮动”的,所以称为浮点数。

​ 浮点类型有float和double两种,其值分别为 32 位 IEEE 754 浮点数和 64 位 IEEE 754浮点数。

​ float可选地以后缀f或F结尾,double可选地以后缀d或D结尾。表格中的取值范围仅表示幅度,它可以是正也可以是负,负数场景在前面加个负号即可。

image-20210923210945129

image-20210923211037363

​ 变量定义的格式是数据类型变量名;或者数据类型变量名 = 变量值;

​ 数据类型相当于锁定了这个变量的一个数据范围,等号是赋值符号,代表把等号右边的值赋给左边的变量,使得这个变量在后边的运算中就携带了这个值的信息。Java 是强类型语言,所以如果等号右边给的值不在变量定义的数据类型范围内,就会编译报错,这也一定程度上避免了我们写错代码。

​ 上面提到的变量都是基本类型的,表达的都是非常基础的数值类的信息,那如果想表达更复杂的一些信息,那就要用到引用类型了。比如最常用的String就是引用类型,常常用它来表示字符串。它底层其实就是一个char[],也就是char类型的数组。引用类型相比于基本类型,它的核心差别在于,引用类型的变量它的内部存储的不是变量值,而是某个对象在内存中的地址。

数据结构-1

Part 1

一.目录

二.基本概念部分

​ 解决问题方法的效率,跟空间的利用效率有关、跟算法的巧妙程度有关

1.数据结构:

​ ①数据对象在计算机中的组织方式

​ –逻辑结构:线性结构(一对一)、树型-非线性(一对多)

​ –物理存储结构

​ ②且必定与一系列加在其上的操作相关联

​ ③完成这些操作所用的方法就是算法

2.描述数据结构–抽象数据类型

  • 数据类型

    • 数据对象集(是什么东西)
    • 数据集合相关联的操作集(相关联的一系列操作)
  • 抽象:描述数据类型的额方法不依赖于具体的实现

    • 与存放数据的机器无关
    • 与数据存储的物理结构无关
    • 与实现操作的算法和编程语言均无关

ps:只描述数据对象集和相关操作集 “是什么”,并不涉及“如何做到”的问题

课上总结部分:

image-20210923202348400

课外Part-1

                                                    ----From A li Java编程入门
image-20210920195649615

一.注释–备注

​ 1.单行注释://;(使用开发工具开发时多用)

​ 2.多行注释:/* …..*/

​ 3.文档注释:/** … */(重要的类或者方法,且需要通过工具)

二.标识符

​ 在任何一个程序之中实际上都是一个结构与的整合体,在Java语言里面有不同的结构:类 、方法、变量结构等等。不同结构一定要有不同的说明。对于结构的说明实际上有命名要求的–有意义的单词组成=标识符。

​ 定义: 字母、数字、_ 、$ 所组成,其中不能用数字开头,不能使用Java中的关键字(保留字) 【英文字母开头】

​ “$”一般有特殊含义,一般自己不用在自己的代码上.

三.关键字

​ 关键字是系统对于一些结构的描述处理,有特殊的含义.

image-20210920192719521

※image-20210920193022076

四.数据类型

​ 进行数据处理就一定需要提供有各种类型的数据定义.

1. Java数据分类

​ ①.基本数据类型:描述的是一些具体的数据单元,例如:1 1.1

image-20210920193800349

​ 每一种基本数据类型都有每一种数据类型保存的数据范围

image-20210920193935419 image-20210920194625757

​ ②.引用数据类型:牵扯到内存关系的使用

​ –数组、类、接口 —— 默认值 :null

2.整型数据类型

按照保存范围由小到大:byte 、short、int、long

来自许老师的宝藏秘籍-1

目录

image-20210918163916987

1.前言

搭好了 Java 开发环境,我们就实战一下,来写一个 Java 应用程序,程序运行的时候能看到 ​Hello World 的输出,同时分析下从编码到运行的整个过程,都发生了什么。

2.编码输出 Hello World

我们不借助任何集成开发环境,就用最原始的手写的方式来编码。
Windows 用户可以直接打开记事本,macOS 用户可以在控制台键入以下命令来打开记事本:

1
open -a TextEdit 

以下是输出 Hello World 应用程序的极简代码。

1
2
3
4
5
public class HelloWorld{ 
public static void main(String[] args){
System.out.println("Hello, World!!!");
}
}
image-20210918164226253

保存文件命名为 HelloWorld.java,代表这是 Java 源码文件。

3.编译源码文件

Java 文件只是源码文件,还不能执行,必须将它转换成字节码文件,也就是 .class 文件才能够执行。这个转换的过程就是编译。
编译指令是 javac,c 就是 compile(编译) 的首字母。

image-20210918164338514
执行以下命令,HelloWorld.java 文件会被编译,同目录下就会生成 HelloWorld.class 文件。

1
javac HelloWorld.java 
1

4.执行字节码文件

.class 文件生成,而且该文件内部有 main 函数,说明有程序执行的入口,那其实意味着 Hello World 程序已经写好并且达到可运行的状态了。
那怎么跑这个 Java 程序呢?
很简单,通过 java 命令即可,命令的参数就是 类名,如下:

1
java HelloWorld 
image-20210918164502899

控制台打印了 Hello, World!!!

image-20210918164535269

这意味着我们成功实现第一个 Java 应用程序,并顺利运行。

那么整个过程是怎么发生的呢,我们来分析一下。

5.代码分析

1
2
3
4
5
public class HelloWorld{ 
public static void main(String[] args){
System.out.println("Hello, World!!!");
}
}

这里有三个 Java 的关键字,分别是 public、class 和 static。
public 是 Java 语法中的访问权限修饰符,后边我们会再学到,这里先简单提下。

public(公共的) 的兄弟还有** protected**(受保护的)、default(默认的) 和 private(私有的),他们决定了 Java 世界中的 类、对象、方法和属性,能被多大的范围访问,是当前类,还是当前包,还是不受限的哪里都能访问。

简单来说就是一种权限控制,类似你发朋友圈,可以选择完全公开,可以选择部分人可见,也可以选择仅自己可见。
回到源码,我们看到 public 修饰了 HelloWorld 这个类以及 main 这个方法。也正是 public,让我们执行程序时,没有遭到阻拦。
​

class(类)表明当前源码文件是个普通类,这个关键词是最常用的,它的兄弟还有interface(接口类)和 enum(枚举类)。
​

class 后边的 HelloWorld 就是编码时为当前这个类起的名字。按照命名规范,类名是字母和数字的组合,首个字符必须是大写字母。
​

类名后面的花括号即 {} 里边的内容就是类的定义。
​

static 是静态修饰符,表明被修饰的内容可以被当前的类直接引用,而不需要将类实例化。此处修饰了 main 方法,表明 main 方法可以直接被 HelloWorld 引用。
​

void 是 main 方法的返回值,此处表示无返回值。
​

main 圆括号里的内容,就是 main 方法的入参,String[] 说明这是一个字符串数组,args 代表变量。
它的作用就是,启动 Java 应用的同时,能够传递一个 String 类型的数组来定制化应用的初始化属性。比如你在执行 java HelloWorld 这个指令时,可以传入你需要的参数。

image-20210918164650529

方法申明后面的花括号即 {} 里边的内容就是方法的定义,方法的代码每一行用分号结束。

1
System.out.println("Hello, World!!!");

System.out 是 Java 提供的一个静态的打印流对象,通过它可以进行打印相关的操作,在它的基础上,调用 println 方法,就可以在控制台输出指定的信息。
​

接下来我们看下对源代码都做了哪些操作。

6.执行路径分析

image-20210918164745465

一、用 JDK 中的 javac 命令将 Java 源代码进行编译,生成 Java 字节码,也就是 class 文件。
javac 命令在 JDK 目录的 bin 目录下。

image-20210918164840617

二、用 JRE 的 java 命令执行 class 文件时,Java 字节码会被传输到 JVM(Java 虚拟机),JVM 会合并字节码以及 JRE 中的库文件一起执行,输出特定硬件平台的机器码,或者说指令集。

三、机器码被底层物理硬件平台执行。
通过这个过程,我们也会发现,要想做到 Write Once, Run Anywhere(一次编写,到处运行) 这样的跨平台特性,就必须保证 class 文件无论在哪个平台都能正常执行,但不同硬件平台接收的指令集有很大差异,那就需要有个东西基于不同的操作系统平台来做适配,担起这一重任的就是 JVM。

因此,正是 JVM 的不跨平台特性,才实现了 Java 语言的跨平台特性。
​

像刚才的 HelloWorld 的源码,经过编译生成了 HelloWorld.class,然后在 MacOs 上用 java HelloWorld 可以执行它。接着,把 HelloWorld.class 复制到 Linux 环境或者 Windows 环境中,同样用 java HelloWorld 来执行,是可以得到与 MacOs 中相同的结果的。
​

事实上,如果复制 HelloWorld.java 文件到 Linux 环境中,同样 javac,生成的 class 文件也是相同的。
再结合下面这个图,就可以理解为什么我们下载 JDK 要区分操作系统版本了。

image-20210918165020197

7.总结

通过HelloWorld 的一个极简 Java 程序,学习如何写 Java 代码以及如何运行 Java 程序,同时也分析了 Java 源码中涉及到的相关语法和规范,最后从这一切是怎么发生的角度上,分析从源码到运行的整个执行路径,在分析的过程中,帮助我们更深地理解了 Java 的跨平台特性。

有了对 Java 初步的认识和感知后,再学习 Java 的一些概念和语法就会相对得心应手。

Note-21.9.18


一.前言部分

1.要求image-20210918084948742

2.阿里云oss

image-20210918084908074

3.阿里云体验实验室(免费的手把手环境搭建等等)

https://developer.aliyun.com/adc/labs/?spm=a2c6h.14164896.J_5404914170.32.69357095HYjWGp

4.a阿里云开源镜像站

https://developer.aliyun.com/mirror/

5.不可或缺的部分

①.命令行与shell工具

②.版本控制Git

③.文本编辑Vim

④.远程服务器SSH(公钥密钥/命令)

⑤.快速查找文件的命令

⑥.数据处理

–如何快速通过命令直接轻松快速的修改、查看、分析、绘制和计算数据和文件。不再从日志文件拷贝、粘贴。不再手动手动统计数据。不再用电子表格画图。

⑦.虚拟机(子系统)

–HyperV

–虚拟机

⑧.网络安全问题的工具和技巧(隐私 )

⑨.信息的检索和整理能力

⑩.键盘快捷键

6.VSC

①.Markdown转换成思维导图

–markmap

②.代码截图

–Carbon

③.贴代码必备

https://carbon.now.sh/


二.Java基础

1.Java快速开始

①.特点:跨平台

2.Java基础部分

image-20210918150246407

关键词:Java语言赋予了特殊含义的单词:Java关键词总结 · 语雀 (yuque.com)

image-20210918150314433

image-20210918150339383

3.Java高级部分

4.技术图谱部分

image-20210918150400749

✳Maven!!

image-20210918151259351

SQL通吃(必会),python和Java互搭配

image-20210918151403577

5.跨平台初体验

✳重点关注:JDK 8/11(前两个重点维护版本-LTS)/17(最新版本-Latest)

✳只能有一个public class + 类名 (大头风-首字母大写)

—public class Hello

{

​ public static void main(String[] args)

{

​ System.out.println(“Hello World!”);

​ }

​ private static (object/string ) getName(int id, float height)

{

​ return “success”;

}

} —({}表示方法实现)

ps: -main只是方法名字,不是关键字

编译启动

–javac Hello.java

–java Hello

(升级)JDK 11–更简单方法编译启动

✳JavaFX–桌面应用(截图/桌面单词等)跨端

https://www.jetbrains.com/help/idea/javafx.html

三.补充

简介~

Hi! 让我瞅瞅是谁来看我blog.
欢迎~~ 欢迎来到小赵的Java小世界!
让我们一起期待它变得越来越好吧!
一起加油!