Java学习第二课

Java学习第二课

这是我的Java学习第二课

第一节 关键字

  • 高级语言有共性
  • system.out.print中system是已存在类,属于jdk自带的。
  • 关键字都是小写,类名要求第一个字母大写,每个单词首字母都要大写。这是书写规范。

第二节 标识符

  • 在程序中自定义的一些名称

  • 由26个英文字母大小写,数字,_ $组成

  • 定义规则

    1. 数字不可以开头
    2. 不可以使用关键字
  • Java中严格区分大小写

  • 为了提高阅读性,要尽量有意义

1
2
3
4
5
6
class Demo
{
public static void main(String[] args)
{
}
}

在这个代码中main标识符,但是是一个固定的标识符.

第三节 注释

单行注释:在要注释的内容前加上//
多行注释:在要注释的内容前和后分别加上/**/,多行注释中不可以嵌套多行注释。
文档注释:在要注释的内容前后分别加上/***/
文档注释与多行注释的区别:文档注释可由jdk中的javadoc工具从.java文件中提取出来。
用处

  • 注解说明
  • 调试程序,缩小错误范围

:注释不会参加编译。

第四节 注释的应用

  • 理清思路

#第五节 常量

  • 整数常量 所有整数

    • 二进制: 0,1.满2进1
    • 八进制:0-7,满8进1,用0开头.方便区分
    • 十进制:0-9,满10进1.
    • 十六进制:0-9,A-F,满16进1.用0x开头.方便区分
  • 小数常量 所有小数

  • 布尔值 true和false

  • 字符常量 数字0-9,字母和符号。必须用''标识

  • 字符串常量 要用''标识

  • null常量 只有一个值null


第六节 进制的转换

  • Byte 字节,1B=8b

  • bit

B与bit
数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
B与iB
1KiB(Kibibyte)=1024byte
1KB(Kilobyte)=1000byte
1MiB(Mebibyte)=1048576byte
1MB(Megabyte)=1000000byte
硬盘生产商是以GB(十进制,即10的3次方=1000,如1MB=1000KB)计算的,而电脑(操作系统)是以GiB(2进制,即2的10次方, 如1MiB=1024KiB)计算的,但是国内用户一般理解为1MiB=1M=1024 KB, 所以为了便于中文化的理解,翻译MiB为MB也是可以的。
同样根据硬盘厂商与用户对于1MB大小的不同理解,所以好多160G的硬盘实际容量按计算机实际的1MiB=1024KB算都不到160G,这也可以解释为什么新买的硬盘“缺斤短两”并没有它所标示的那么大。
——百度百科


第七节 进制的转换

$$
\begin{align*}
752&=7\times10^{2}+5\times10^{1}+2\times10^{0} \
&=2\times10^{0}+5\times10^{1}+7\times10^{2}
\end{align*}\
$$
可以看出每个十进制数都可以表示为每位上的数与10的相应次方之和
$$
\begin{align*}
1011 &=1\times2^{0}+1\times2^{1}+0\times2^{2}+1\times2^{3}\&=11
\end{align*}\
$$
二进制同理,记得要从后面开始写,首位是零位

倒数第七位 倒数第六位 倒数第五位 倒数第四位 倒数第三位 倒数第二位 倒数第一位
0 1 0 1 0 1 1
64 32 16 8 4 2 1

因为0与任何数的乘积都为零,所以只需将1所对应的数加起来就行.

因为二进制中三位数中最大数111等于7,所以将二进制数三个三个分开,不足的话前面补零,然后把每三位的十进制数连接起来,就是八进制数.例如:
$$
10101110=010 ;101; 110=2+5+6=0256;;
$$
记得八进制前面要带零.同理,四位四位算就是十六进制.

这里再放一个高中数学必修三的进制转换课程,资源来自乐乐课堂,侵删.

第八节 负数的进制

第九节 二进制的四则运算

第十节 变量

概念

内存中的一个存储区域>
该区域有自己的名称(变量名)和类型(数据类型)
可以变化,用来储存数据

类型

1
2
3
4
5
6
7
8
9
10
11
12
graph LR
A[类型] -->B[引用数据]
B -->B1[class]
B -->B2[interface接口]
B -->B3[数组]
A -->C[基本数据]
C -->C1[数值型]
C1 -->D1["整数类型: byte short int(默认) long"]
C1 -->D2["浮点类型: float double(默认)"]
C -->C2[字符型: char]
C -->C3[布尔型: true false]

整数类型对比

类型 bit Byte 取值范围
byte 8 1 -128~127
short 16 2 -32768~32767
int 32 4 -2147483648~2147483647
long 64 8 非常大~

浮点类型对比

类型 bit 取值范围
float(单精度) 32 小,,,,
double(双精度) 64 大,,,

注意

  1. 定义long型变量时,要在数据后加上L.但是定义小数据时可以不加.为了规范,加上.
  2. 定义float型变量时,要在数据后面加上f.
  3. 利用{ }可以定义变量的作用域.
  4. 运算顺序是从右到左,例如x=x+5意为将x的值加上5再赋值给x.

自动类型提升与强制转化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Demo{
public static void main(String[] args){
int a = 3;
byte b =5 ;
a = a+b;
/*数据类型不一样,但是可以相加,原理是会自动将byte数据提升到int型.
*/
byte c= 3;
c = c+4;
/*会报错,因为数字4默认是int型.
强制类型转换:c = (byte)(c+4);
*/
}
}

强制转换其它实例:

1
2
3
int a =(int)43.5;//此时a的值是43
long b = (long)453.6F;//此时b的值是453
int c = (int)'d';//此时c的值是100

字符类型运算过程

​ 计算机中有一个将二进制数据映射成字符的编码表,即ASCII编码表.但是ASCII中每个字符占7bit,所以只有英文和一些常见符号.后来有了支持中文的GB2312,GBK,UTF-8.其他编码表一般都兼容ASCII编码表

Unicode编码表:也叫统一码、万国码,Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。UTF-8UTF-16UTF-32都是将数字转换到程序数据的编码方案。

正因如此,字符与数字之间有了一对一的映射,所以字符也可以参与数字运算.

类型运算细节

1. 实例一

1
2
3
4
5
6
7
8
byte a = 0;
a=4+5;
System.out.println(a); //控制台输出9
byte b=0;
byte b1=4;
byte b2=5;
b=b1+b2;
System.out.println(b); //报错:可能损失精度

原因:对于byte a = 0;这句,右边的数字0默认是int型,在进行赋值时会先判断该数值是否在byte的取值范围内.如果在的话会自动进行数据类型转换;而对于b=b1+b2;由于等号右边有变量,无法进行判断,于是就会报错.

2. 实例二

1
2
3
4
5
6
7
8
int a1=5;
int a2=5;
int a=a1+a2;
System.out.println(a); //正常输出10.
int b1=Integer.MAX_VALUE ; //取得int最大值.
int b2=1;
int b=b1+b2;
System.out.println(b); //输出-2147483648

原因:由于数据默认是int型,所以int型数据运算时不需要检验.导致了有可能超出范围但是编译器不报错,输出了负数.

运算符

算数运算符 + - * / %

  • java运算是强类型语言,比如整数运算还是整数.

  • % –>取余,模运算.例如5%2=1.

  • -5%2=-1;5%-2=1;即a=b*c+d,所以如果被模数是负数,模运算得数也是负数.

  • + 可以用来计算和,自加和连接字符串.

  • 自加:++ 自减:--

自增自减 ++ --

  • ++写在前面和后面计算结果是不同的,++n表示先加1再引用n,n++表示先引用n再加1。不建议把++运算混入到常规运算中,容易自己把自己搞懵了^1
  • b=a++**表示a自增,把原来的值赋给b**,b=++a表示a自增然后把值赋给b

赋值运算符 =

  • a+=2; //大概a=a+2;;类似的还有-= *= /=
1
2
3
short s = 3;
s+=4; //一次运算,会自动转换类型
s=s+4;//二次运算,会报错.不会自动转换

比较运算符 < > == != <= >= instanceof

逻辑运算符 & && | || ! ^

  • 用于连接两个Boolean型的表达式
  • & 非短路运算符,即会始终判断两个表达式: && 短路运算符,即当第一个表达式为false时不会去判断第二个表达式.| ||同理,|| :当第一个表达式为true时,不再去判断第二个运算符
  • ^ 异或运算符,当左右两个布尔值不同时为真,相同时为假:**或者说当仅有一个true**时为真.

位运算符 << >> >>> & | ^ ~

  • << 左移 >> 右移 >>> 无符号右移 &|^ 异或 ~ 反码
  • 数字A异或^另一个数B两次,结果还是A,可以用于加密.密码就是数字B
  • 3<<2表示3的二进制向左边移两位.3<<2相当于$3\times2^2$,
  • 当执行>>时,原数二进制最高数是啥就补啥.即正数还是正数,负数还是负数.6>>2相当于$6\div2^2$.
  • >>>表示数据进行右移时,最高位不论是什么都用0补.而>>会考虑原数符号.
  • 通常使用位运算更加高效.
位运算练习
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Operate{
public static void main(String[] args){
int a = 3,b = 5;
//要求将a,b两个变量互换位置.
//第一种方法 定义第三方变量 开发十首选
int c ;
c = a;
a = b;
b = c;
//第二种方法 不需要定义第三方变量,但可能会导致精度缺失
a = a + b; //a = 3 + 5 = 8
b = a - b; //b = 8 - 5 = 3
a = a - b; //a = 8 - 3 = 5
//第三种方法,不需要定义变量,但阅读星差
a = a ^ b; //a = 3 ^ 5
b = a ^ b; //b = (3 ^ 5) ^ 5 = 3
a = a ^ b; //a = (3 ^ 5) ^ 3 = 5
}

}

三元运算符

格式: 条件表达式?表达式1:表达式2;

作者

YunShu

发布于

2020-03-04

更新于

2021-01-31

许可协议

评论