来自许老师的宝藏秘籍-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 的关键字,分别是 publicclassstatic
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小世界!
让我们一起期待它变得越来越好吧!
一起加油!