自学java-20221013编程基础

41 阅读6分钟

14158.jpg 这几天没有更新文章,断断续续的学习中,然后阶段性更新

1. 变量

  1. 变量由数字、字母(包括中文)、下划线(_)和美元符号($)组成;
  2. 区分大小写,但不限制数量;
  3. 不能数字开头;
  4. 不能是Java中的关键字和保留关键字
  5. 非法标识符举例 : 2UserName(数字开头)、user#Name(#)、Hello 大海(空格)、class(关键字)
public class HelloWorld {
    /**
     *成员变量
     */
    int num = 10;
    public static void main(String[] args) {
        /*局部变量*/
        int num = 20;
        System.out.println(num); // 受限于void方法的限制,不能访问私有变量
    }
}

2. 8种基本数据类型

前言知识: 
            1个字节(Byte) = 8个位(Bit/比特)
            2个字节(Byte) = 16个位(Bit)
            4个字节(Byte) = 32个位(Bit)
            8个字节(Byte) = 64个位(Bit)
单位换算:
            1 Byte = 8 Bit
            1 Kb = 1024 Byte
            1 Mb = 1024 Kb
            1 Gb = 1024 Mb
            1 Tb = 1024 Gb
            1 PB = 1024 Tb
    在内存计算过程中,字节少的数据运算的更快;   在硬盘存储中,字节少的数据类型,也可充分存入更多的数据

image.png

/**
 * 8种基本数据类型
 * */
// 6种数值类型
byte b = 10;            //字节型,占用1个字节,         取值范围             -128- 127          默认: 0
short s = 10;           //短整型,占用2个字节,         取值范围          -32768- 32767         默认: 0
int i = 10;             //整型,占用4个字节,           取值范围   -2147483648 - 2147483647     默认: 0
long l = 100L;          //长整型,占用8个字节,         取值范围              ---               默认: 0
float f = 10.00F;       //单精度浮点型,占用4个字节,   取值范围               ---              默认: 0.0F
double d = 10.00D;      //双精度浮点型,占用8个字节, 取值范围              ---               默认: 0.0D
// 字符型
char c = 'A';           //占用2个字节,              取值范围             0 - 65535          默认: '\u0000'
// 布尔型(布尔型在真实存储中占用字节情况需要根据不同平台而决定,所以具有不确定性)
boolean B = false;      //占用字节不确定,           取值范围          true | false          默认: false

3. 进制转换

image.png

image.png

image.png

image.png

image.png

十进制转成二进制: 小数部分,只是取小数部分,乘积后的数据去掉整数部分再去乘2

4. 基本数据类型转换

自动类型转换:

1.容量小的类型,自动转换成容量大的数据类型

2.byte、short、int,他们三个在计算时会自动转换成int类型

3.如果把int类型值转换成float类型值,或者long转成double,或者int转成double类型,不需要强制类型转换,但是数据可能会丢失精度

image.png

// float和double 是属于近似值
// byte char short int long 是属于精确值
// 由精确值转成近似值,精度可能会丢失

byte b = 10;
short s = b;            //把一个字节赋值给短整型数据,自动转换成短整型
System.out.println(s);  // 10
int i = s;              //把一个短整型数据赋值给整型,自动转换
System.out.println(i);  // 10
long lon = i;           //把一个整型数据赋值给长整型
System.out.println(lon);// 10

// char --> int 自动转换
char sex = '男';            //一个中文汉字站2个字节
int sex2 = sex;             //自动转换
System.out.println(sex2);   // 30007

float f = 20f;
double d = f; // 自动转换
System.out.println(d); // 20.0

byte char short int long属于精确值, float和double近似值;精确值转近似值时可能会丢失精度。 

int num = 2147483000;
float num2 = num;
System.out.println(num2); //2.14748301E9 如果是表示货币值,不建议是使用float和double

byte b = 10;
short s = 1;
short s1 = s + b; // 报错了,因为自动类型转换的问题, byte short int都会自动转成int, 所以s1不能时short类型
System.out.println(s1);

1670143782668.jpg

5. 强制类型转换

1.容量大的数据类型转换成容量小的数据类型,注意可能会出现数据精度降低或数据溢出

2.boolean类型的数据,不能强制转换成其他任何类型的数据

byte b = 10;
short s = 1;
short s1 = (short)(s + b);  // 强制转换成short类型
System.out.println(s1);

6. 关键字

image.png

7. 转义字符

1. \n: 换行符
2. \r: 回车符
3. \t: 水平制表(跳转到下一个tab)
4. \\: 表示\(反斜线)
5. \': 表示单引号
6. \": 表示双引号

System.out.print: 在控制台打印(所有结果单行打印)
System.out.println: 在控制台换行打印(换行打印)

8. 运算符与优先级

1. 算术运算符
+ : 加
- : 减
* : 乘
/ : 除
% : 取余(也叫取模)
++: 自增(分先增和后增,即 先赋值后增加和先赋值后增加)
--: 自减

2. 关系运算符(返回布尔值)
== : 相等于
!= : 不等于
<  : 小于
>  : 大于
<= : 小于等于
>= : 大于等于

3. 逻辑运算符
&  : 与
|  : 或
^  : 异或
!  : 非
&& : 短路与
|| : 短路或

在计算机中,非0即真,0为假
逻辑或: 或1则1
逻辑与: 全1才1
true & false  => false // 与运算,只有两个值都为true时结果才为true
true | false  => true  // 或运算,只要有一个值为true时结果就为true
true ^ false  => true  // 异或运算,两个值相同为false,不同为true
!true         => false // 取反
true && false => false
true || false => true

& 和 && 的区别 (|和 ||的区别同理)

&:  在逻辑运算时,分别计算算式表达式再进行与运算;在做位运算时表示按位与
&&: 先计算左边的表达式,如果结果是false,则不用计算右边了,直接短路了,返回false

4. 位运算符(计算机最快,因为计算机就是这种计算方式)
~ : 按位取反(全都取反)
& :按位与(有00,只有两个1才为1)
| : 按位或运算(有11,只有两个0才为0)
^ : 按位异或(相等为0,不同为1)

5. 移位运算符

image.png

如何交换两个数:
    1. 定义一个变量法 
    2. var a = 1; b = 2; a = a + b - (b = a);(前后端通用)
    3. 利用位移的方法(异或的算法是交互的速度最快的,因为是位移的方式)
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    4. 利用加减法 或者 乘除法的妙用;

6. 三目运算符( ` x ? y : z`)

7. 运算符优先级表

image.png

优先级举例:
int a = 1;
int b = 2;
a = ++a + (b--) + (a-b) + b = 6;
// 解析:
a  = A + B + C +D
A = ++a = 2;
B = (b--) = 2; 整体为2,但是整体之后b马上变成了1;
C = (a-b) = 1; a = 2了; b = 1了; 做差就是1;
D = b = 1;

var a = 1; b = 2; a = ++a + (b--) + (a-b) + b = 6;(前端也一样)

9. 引用其他类

用 import 引入需要用到的类, 除了lang(language的缩写)文件夹下的包自动引用了

image.png

import java文件夹下的类,下一层文件夹路径用.来引用, 然后加上.java的类名
举例引用一个Scanner类: import java.util.Scanner即可

image.png

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        //创建一个键盘输入工具的实例
        Scanner input = new Scanner(System.in);
        System.out.println("请开始输入吧,回车后显示。您输入的数据是: ");
        int x1 = input.nextInt(); //从键盘接收一个int类型的数据
        System.out.print(x1); //输出键盘输入的数值
    }
}

10. switch分支语句

image.png

11. 分支语句比较和总结

image.png

12. while和dowhile

while(条件表达式){
    代码块
}
符合条件,循环继续执行; 否则, 循环退出
特点: 先判断, 再执行

image.png

do{
    循环操作代码块
}while(循环条件)
先执行一遍循环操作, 符合条件, 循环继续; 否则, 退出循环;
特点: 先执行, 再判断

image.png

13. for循环

for(初始化参数, 判断条件, 更新循环变量){
    循环体
}

循环一定要有出口, 否则会死循环;

多重循环, 即循环嵌套; 外循环控制行, 内循环控制列;