【java 基础一】 纯语法基础记录

简介: Java 变量是程序中存储数据的容器。在 Java 中,变量需要先声明再使用,并且必须先声明再赋值。

一、基础

1.1 变量

Java 变量是程序中存储数据的容器。
在 Java 中,变量需要先声明再使用,并且必须先声明再赋值。

  1. 声明变量:声明变量时需要指定变量的类型、名称和初始值。例如,声明一个整型变量可以如下所示:
    int num = 0;
    
  2. 变量类型:Java 中的变量类型可以分为基本数据类型和引用数据类型。
    基本数据类型包括:byte、short、int、long、float、double、char 和 boolean。
    引用数据类型包括:类、接口、数组等。

  3. 变量作用域:Java 中的变量作用域可以分为局部作用域、成员作用域和静态成员作用域。
    局部作用域指的是在方法或代码块中声明的变量,
    成员作用域指的是在类中声明的变量,
    静态成员作用域指的是在类中声明为 static 的变量。

  4. 变量赋值:在 Java 中,变量赋值使用等号(=)操作符。例如,将整型变量 num 赋值为 1 可以如下所示:

    num = 1;
    
  5. 变量运算:Java 中的变量可以进行算术运算、比较运算和逻辑运算等操作。例如,将两个整型变量相加可以如下所示:
    int a = 1;  
    int b = 2;  
    int c = a + b;
    
  6. 字符串变量:Java 中字符串变量使用 String 类型表示。例如,声明一个字符串变量可以如下所示:
    String name = "Tom";
    
  7. 数组变量:Java 中数组变量使用数组类型表示。例如,声明一个整型数组可以如下所示:
    int[] nums = new int[10];
    
    在 Java 中,变量是程序中必不可少的元素,它为程序提供了存储数据的能力。
    通过声明变量、给变量赋值、进行变量运算等操作,可以实现各种复杂的程序功能。

1.2 数据类型

1.2.1 基本数据类型

基本数据类型包括:byte、short、int、long、float、double、char 和 boolean。

数据类型 关键字 内存占用 取值范围
整数类型 byte 1 byte(8位) - 2^7 - 2^7 -1
short 2 byte(16位) - 2^15 - 2^15 -1
int 4 byte(32位) - 2^31 - 2^31 -1
long 8 byte(64位) - 2^63 - 2^63 -1
浮点类型 float 4 byte(32位) 一3.403E38~3.403E38
double 8 byte(64位) 1.797693e+308~ 4.9000000e-324
字符流行 char 2 byte(16位) 0 - 2^16 -1
布尔类型 boolean 1 byte(-) true,false

1 byte = 8位

这些基本数据类型,在运算时,如果类型不一样,则需要进行类型的转化,如 int + float 型数据想加,我们分别讲下常见的类型转换。

  • 自动类型转换
    必须满足转换前的数据类型的位数要低于转换后的数据类型, 如上表所示,
1字节 2字节 4字节 8字节
byte short int long
char float double
例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,
同样float数据类型的位数为32,可以自动转换为64位的double类型。

这种自动的转换,不需要担心精度丢失。

这里有个特例,long可以自动转换为float,简单来说因为浮点数用科学计数法存储的,而整数是用二进制存储的。
所以虽然long型是64位的,float型是32位,但是float型所能表示的数要远远大于long型。
  • 强制类型转换
    转换的数据类型必须是兼容的,格式:(type)value
    一般是大的类型转换为小类型
类型转换时可能会导致溢出或精度的丢失,另外浮点数到整数的转换是通过舍弃小数得到的。

如果涉及到不同数据类型之间的数学运算,比如+、-、*、/等操作,
小类型的数据和大类型的数据进行计算时,会自动进行类型提升,最终的结果变成大类型!

1.2.2 引用数据类型

引用数据类型包括:类、接口、数组等。

// 数组的静态初始化
int[] arr = new int[3];
int[] arr = new int[]{
   4,5,6};
int[] arr = {
   1,2,3};


// 
Anr anr = new Anr(cookie);

1.3 原码、反码、补码及进制转换

原码: 最高位是符号位(0 表示正数,1 表示负数),其他位为数值位。

10的原码:  00001010
-10的原码: 10001010

反码: 正整数的反码与原码一致,负整数的反码是在原码基础上,符号位不变,其他位按位取反

10的反码:  00001010
-10的反码: 11110101

补码: 正整数的补码与原码一致,负整数的补码是在反码基础上加1

10的补码:  00001010
-10的补码: 11110110

在这里插入图片描述

二进制
二进制,里面只有0和1
十进制
将十进制除以2再取余,然后将余数和最后的1按照从下向上倒序写的方法,即可变为二进制。
八进制
所谓八进制,就是每 3 位二进制作为一个单元,其中最小的数是 0,最大的数是 7,一共 8 个数字
在这里插入图片描述

十六进制
十六进制,就是每 4 位二进制作为一个单元,其中最小数是 0,最大数是 15,一共 16 个数字,分别用 0 ~ 9、A、B、C、D、E、F 表示。
在这里插入图片描述

1.4 运算符

运算符 描述
+ 加法: 进行两侧变量值相加
- 减法: 进两侧变量值相减
* 乘法: 进行两侧变量值相乘
\ 除法: 左侧变量值除以右侧变量
% 取模: 左侧变量值除以右侧变量取余数
++ 自增: 自身+1
–- 自减: 自身-1
== 判断两侧的变量值是否相等,如果相等条件为真
!= 判断两侧变量值是否不相等,如果不相等条件为真
> 判断左侧变量值是否大于右侧变量值, 如果大于条件为真
< 判断左侧变量值是否小于右侧变量值, 如果小于条件为真
>= 判断左侧变量值是否大于或者等于右侧变量值, 如果大于或者等于条件为真
<= 判断左侧变量值是否小于或者等于右侧变量值, 如果小于或者等于条件为真
&& 逻辑与。当且仅当两个操作数都为真,条件才为真。
逻辑或。如果任何两个操作数任何一个为真,条件为真。
! 逻辑非。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。
<< 有符号左移, 相当于乘以2^n
>> 有符号右移, 相当于除以2^n
>>> 无符号右移
& 位与 (只有1&1得1,其他得0)
位或 (只有0 0为0 ,其他为1)
~ 位非(反码) 即按位取反
^ 位异或 (即 相同的为0 不同的为1) 1^1=0 0^0=0 1^0=1

一些基本的运算符比较简单,我们说下位运算符,

位运算符 是按照二进制位操作 整数 的, 涉及到 二进制 和 整数存储方式(原码、反码、补码)

直接举例说明
以 4 & -5 = 0为例子展示运算流程:

1. 因为4为正数,所以原码和补码相同,即4的补码为:00000000 0000000 00000000 00000100

  2.因为-5为负数,所以需要进行原码 >>> 反码 >>> 补码的转换

    1)原码:10000000 00000000 00000000 00000101

    2)反码:11111111 11111111 11111111 11111010

    3)补码:11111111 11111111 11111111 11111011

  3.将4和-5的补码进行 & 运算:00000000 0000000 00000000 00000100

                  11111111 11111111 11111111 11111011         &

               00000000 00000000 00000000 00000000

  4.得到的补码结果为:00000000 00000000 00000000 00000000。所以结果为0

    /*
     * 位运算
     * "<<" 有符号左移
     * ">>" 有符号右移
     * ">>>" 无符号右移
     * "&" 位与 (只有1&1得1,其他得0)
     * "|" 位或 (只有0|0为0 ,其他为1)
     * "~" 位非(反码) 即按位取反
     * "^" 位异或 (即 相同的为0 不同的为1) 1^1=0 0^0=0 1^0=1
     */
    private static void testWei() {
   
        /**
         * "~" 位非(反码) 4 的反码 0000 0000 0000 0000 0000 0000 0000 0100 
         *             按位取反 1111 1111 1111 1111 1111 1111 1111 1011 
         * 此时按位取反后的值为补码 现在需要换成二进制原码用来输出 先减1
         *                   1111 1111 1111 1111 1111 1111 1111 1010 
         *             然后取反 0000 0000 0000 0000 0000 0000 0000 0101
         * 最后 输出接口要加上符号位 即 -5 (先取反 ,在减1也可以)
         */
        System.out.println("~4 " + (~4));

        /**
         * "&" 位与 (只有1&1得1,其他得0) 4 的补码 0000 0000 0000 0000 0000 0000 0000 0100 6
         * 的补码 0000 0000 0000 0000 0000 0000 0000 0110 位与结果 0000 0000 0000 0000
         * 0000 0000 0000 0100
         */
        System.out.println("4&6 " + (4 & 6));

        /**
         * "<<" 有符号左移 规律左移是基数乘以2的移位幂次方,比如3<<2则是3*2*2也就是3乘以2的2次幂
         */
        System.out.println("3 << 3 " + (3 << 3));

        /**
         * ">>" 有符号右移 规律左移是基数除以2的移位幂次方,比如3>>1则是3/2也就是3除以2的1次幂
         */
        System.out.println("3 >> 1 " + (3 >> 1));

        /**
         * ">>>" 无符号右移 无论高位是0还是1都补0
         */
        System.out.println("3 >>> 1 " + (3 >>> 1));
    }

1.5 修饰符

分成访问修饰符 & 非访问修饰符,这个不多说,我们看图记忆即可。
在这里插入图片描述

1.5 表达式 & 语句 & 代码块

1.5.1 表达式

Java 表达式是 Java 编程语言中的基本构建块,用于执行特定的操作并返回一个值。
Java 表达式可以包含 Java 操作符、变量、方法和常量。以下是一些 Java 表达式的示例:我们举几个常见的例子
加法表达式:

int a = 10;  
int b = 20;  
int sum = a + b;

乘法表达式:

int a = 10;  
int b = 20;  
int product = a * b;

条件表达式:

int a = 10;  
int b = 20;  
int max = (a > b) ? a : b;

字符串拼接表达式:

String str1 = "Hello";  
String str2 = "World";  
String message = str1 + " " + str2;

方法调用表达式:

int a = 10;  
int b = 20;  
int sum = add(a, b);

数组引用表达式:

int[] arr = {
   1, 2, 3, 4, 5};  
int firstElement = arr[0];

1.5.2 语句、代码块

在 Java 中,使用大括号({})来定义代码块,可以使用分号(;)来结束语句。

声明语句:用于声明变量、方法和类等。
赋值语句:用于给变量赋值。
条件语句:用于根据条件执行不同的代码块。
循环语句:用于重复执行一段代码。
方法调用语句:用于调用方法。
异常处理语句:用于处理程序运行时发生的异常。
注释语句:用于添加注释,帮助其他开发人员理解代码。
数组声明语句:用于声明和初始化数组。
接口声明语句:用于声明接口。
类定义语句:用于定义类。

1.6 数组

Java中的数组是一种数据结构,用于存储相同类型的数据。
一维数组

// 数组的静态初始化
int[] arr = new int[3];
int[] arr = new int[]{
   4,5,6};
int[] arr = {
   1,2,3};

二维数组

// 声明一个二维数组变量  
int[][] myArray;  

// 创建二维数组并初始化  
myArray = new int[3][4];
相关文章
|
6月前
|
存储 Java API
Java语法基础:构建编程世界的基石
Java语法基础:构建编程世界的基石
|
6月前
|
存储 Java 开发者
Java的语法基础
Java的语法基础
|
存储 Java 容器
Java语法基础
基础知识学习
125 0
Java语法基础