java 基础 (一)
java 语言的特点
- 面向互联网编程、安全可靠、面向对象
- 跨平台(操作系统) — JVM(java虚拟机): 事先在对应的操作系统上安装对应版本的JVM(提供完备的运行环境),java 程序是在JVM中进行执行,使得不同的操作系统只要是同一java程序的得到的结果是一样的。
java 语言的三大技术架构
-
J2se(基础版/标准版):主要是用于提供小型开发以及桌面服务解决方案
-
J2ee(企业版/商务版):主要是提供了企业中模块化开发、集中式开发解决方案
-
J2me(小型版):主要提供终端、嵌入式开发可能
JDK1.5版本是java的里程碑式的版本,更改三大版本的名称为 JAVASE、JAVAEE、JAVAME
Java语言的环境搭建
-
java 核心组件:
JRE(Java Runtime Environment java运行时环境):提供了java程序执行时需要的环境
- JRE=JVM+核心类库(java程序启动时所必须要加载的信息)
JDK(java Devlopment Kit java开发工具包):提供了java程序的开发以及运行所需的环境
- JDK=JRE+开发工具包
JDK 包含 JRE 包含 NVM
-
java工作方式:
编写源代码文件 (.java) — > 编译器 (javac运行源代码,产生字节码文件.class) — > 输出 — > java虚拟机 (JVM): 将字节码转换成平台能够理解的形式来运行
- .java文件(程序员可以看得懂得文件—源文件)
- .class文件(可以被java识别的文件并可以执行的文件—字节码文件)
- .java文件–通过javac命令—编译—.class文件
- .class文件—通过java命令–运行–结果
Java基本语法组成
关键字
- 在java中被赋予了特殊含义的单词一共有53个
- const和goto都是特殊的关键字,保留字
- 特点:都是小写
标识符
- 英文大小写、中文字符、数字、特殊字符 ($ _)
- 不能和关键字冲突,严格区分大小写
- 不建议使用中文
- 数字不能开头也不能单独使用
- $ 和 _ 不建议随便使用
- 命名规范(驼峰命名法)
- 类名/接口名—XxxYyyZzz
- 方法名/变量名—xxxYyyZzz
- 常量名—XXX_YYY_ZZZ
- 包名—单级 xxx;包名—多级 xxx.yyy.zzz (如com.baidu)
进制
-
二进制:逢2进1,包含0和1,从jdk1.7开始 0b101
-
八进制:逢8进1,包含0-7,以0开头
-
十进制:逢10进1,0-9
-
十六进制:逢16进1,包含0-9,a-f(不区分大小写),以0x开头
-
十进制转二进制:十进制数/2取余,直到商为0,余数反转,即为二进制。
-
二进制转十进制:用二进制每一位上的数字乘以2的幂次并求和
-
二进制转八进制:从右到左,三位一组,若不够三位左侧补0,将每组的二进制转为十进制,拼接起来,就是对应的八进制
-
八进制转二进制:将八进制每一位的数字转为三位二进制之后,拼接起来即得到二进制数
-
二进制转十六进制:从右到左,四位一组,若不够四位左侧补0,将每组的二进制转换的数字拼接起来,就是对应的十六进制
-
十六进制转二进制:将十六进制每一位的数字转为四位二进制之后,拼接起来即得到二进制数
码表
- Latin-1 (ASCII):包含英文、数字、常见符号,历史上最早出现的码表,一个字符占一字节
- GB2312:由中国国家标准定义,兼容ASCII,在ASCII的基础上增加了常用汉字,一个字符占两字节
- GBK:兼容GB2312,增加了更多汉字,由中国国家标准定义,一个字符占两字节
- unicode:是一种映射规则,并不是码表,为每个符号指定了一个编码,并没有指定如何映射成二进制。
- utf-16/utf-32:兼容ASCII,将unicode定义的符号对应的数字转为定长二进制代表该符号,是Unicode的编码实现,占用2/4字节,java语言的底层使用utf-16来代表字符
- utf-8:兼容ASCII,将unicode定义的符号对应的数字转为变长二进制代表该符号,是Unicode的编码实现,占用1-4字节,
汉字在utf-8码表中占用3个字节
编码和解码
- 计算机内存中的数据,统一使用
Unicode
编码 - 数据传输或保存到硬盘上,使用
UTF-8
编码 - 编码 /
encode
:将Unicode
字符串转换为特定编码格式对应的字节码的过程 - 解码 /
decode
:将特定编码格式的字节码转换为对应的Unicode
字符串的过程
引用
-
格式:数据类型 引用名称;
-
分类:常量引用和变量引用
-
常量:引用不会发生变化的量
-
常量引用格式:final 数据类型 常量名; final int AGE_MAX = 18;
-
变量:引用可以发生变化的量
-
变量引用格式: 数据类型 变量名;
-
数据类型
-
基本数据类型:整形、浮点型、字符型、布尔型
-
整形: byte (1字节)、short (2字节)、int (4字节)、long (8字节)
- 整数直接量默认使用int类型,如果需要使用long类型,需要加l/L后缀
-
浮点型:float (4字节)、double (8字节)
-
浮点数直接量默认使用double类型,如果使用float类型,需要加后缀f/F
-
float类型精确的有效位数为6-7位,double类型精确的有效位数为15-16位
-
采用二进制的科学计数法,float 4字节 = 32 bit,最高位为符号位,8位表示指数部分,23位表示数值部分
-
浮点型可以在程序中用科学计数法表示,如3.145e2 = 314.5
-
程序在执行浮点数时,可能会出现精度损失问题(大部分小数转二进制是无限位数)
-
-
字符型:char (2字节)
-
布尔型:boolean (1字节)
-
-
引用数据类型:类、接口、数组
数值和编码
-
真值和机器数:真值是机器数所代表的实际的值,机器数是真值在计算机中的表示。
-
定点小数: x 1 . x 2 x 3 . . . x n − 1 x n x_1 . x_2 x_3 ... x_{n-1} x_n x1.x2x3...xn−1xn 组成 – 符号 小数点 数值部分
-
定点整数: x 1 , x 2 x 3 . . . x n − 1 x n x_1, x_2 x_3 ... x_{n-1} x_n x1,x2x3...xn−1xn 组成 – 符号 数值部分
-
机器数的原码表示:符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.
-
使用机器数的原码直接对负数进行算数运算会出现问题,因此引入机器数的补码
-
机器数的反码表示:正数的反码是其原码本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
-
机器数的补码表示
- 整数
- 真值 x = + x 1 x 2 x 3 . . . x n − 1 x n x= +x_1 x_2 x_3 ... x_{n-1} x_n x=+x1x2x3...xn−1xn ,则 [ x ] 补 = 0 x 1 x 2 x 3 . . . x n − 1 x n [x]_{补} = 0x_1 x_2 x_3 ... x_{n-1} x_n [x]补=0x1x2x3...xn−1xn
- 真值 x = − x 1 x 2 x 3 . . . x n − 1 x n x= -x_1 x_2 x_3 ... x_{n-1} x_n x=−x1x2x3...xn−1xn ,则 [ x ] 补 = 100...0 ( n 个 0 ) − ∣ x ∣ [x]_{补} = 100...0 (n个0) - |x| [x]补=100...0(n个0)−∣x∣
- 小数
- 真值 x = + 0. x 1 x 2 x 3 . . . x n − 1 x n x= +0.x_1 x_2 x_3 ... x_{n-1} x_n x=+0.x1x2x3...xn−1xn ,则 [ x ] 补 = 0. x 1 x 2 x 3 . . . x n − 1 x n [x]_{补} = 0.x_1 x_2 x_3 ... x_{n-1} x_n [x]补=0.x1x2x3...xn−1xn
- 真值 x = − 0. x 1 x 2 x 3 . . . x n − 1 x n x= -0.x_1 x_2 x_3 ... x_{n-1} x_n x=−0.x1x2x3...xn−1xn ,则 [ x ] 补 = 10.00...0 ( n 个 0 ) − ∣ x ∣ [x]_{补} = 10.00...0 (n个0) - |x| [x]补=10.00...0(n个0)−∣x∣
- 整数
-
原码和补码的相互转换
-
对于正数: [ x ] 原 = [ x ] 补 [x]_{原} = [x]_{补} [x]原=[x]补
-
对于负数:
原码符号位不变,其余各位取反,末位+1得补码;(即在反码的基础上+1)
补码符号位不变,其余各位取反,末位+1得原码。
-
运算符
-
算数运算符:
+
-
*
/
%
++
--
-
字符和数值型变量进行求和,默认把字符转为ASCII,字符串常量可以和任意数据使用
+
进行拼接 -
ArithmeticException —— 算术异常
-
Infinity (正无穷) - Infinity(负无穷)NaN (Not a Numbe)
-
a++
ora--
:先把a的值赋值给a++
ora--
整体,再自加1 -
a++
ora--
:先自增1,再把a的值赋值给a++
ora--
-
赋值运算符:
=
+=
-=
*=
\=
%=
&=
(按位与等)|=
(按位或等)^=
(按位异或等)>>=
(右移等)<<=
(左移等)>>>=
(无符号右移等)-
java不支持连等定义 int a=b=c=3; //error 支持int a=1, b=2, c=3; //correct
-
java支持连等赋值 int a=3; int b = a+=a-=a+=5; // -2 如果左边变量的值发生改变会影响右边变量的值,反之不会。
-
扩展的赋值运算符 (+=,-=,…) 会加上强制类型转换
-
-
-
比较(关系)运算符:
>
<
==
!=
>=
<=
-
逻辑运算符:
&
|
^
!
&&
||
- & 和 &&:运算规则相同,如果&&左边出现false那么右边默认不执行(短路效果),常用&&
- | 和 ||:运算规则相同,如果||左边出现true那么右边默认不执行(短路效果),常用||
-
位运算符:
&
(按位与)|
(按位或)^
(按位异或)~
(按位取反)>>
<<
>>>
- 对机器数补码进行操作
- 如果操作数是int类型,给定的移动位数需要对32进行取余,最后的取余结果才是底层真正的移动位数
-
三目(元)运算符:布尔表达式 ? 表达式1 : 表达式2
键盘录入
-
导包: import java.util.Scaneer;
-
找到Scaneer: Scaneer sc = new Scaneer(System.in);
-
获取数据:int num = sc.nextInt();
import java.util.Scanner; class JavaDemo{ public static void main(String[] args){ // 找到Scanner Scaneer sc = new Scaneer(System.in); // 获取数字 int num = sc.nextInt(); //获取整数 String str = sc.nextLine(); // 获取一行,当做字符串 System.out.println("nums:"+ num); System.out.println("Str:"+ str); } }