03.Java基本语法

关键字与保留字

关键字(keyword)的定义和特点:
定义:被Java语言赋予了特殊的含义
特点:所有的关键字都是小写的
保留字(reserved word):现有Java版本尚未使用,但以后版本可能当作关键字使用 goto const

标识符(indentifier)

Java对各种变量、方法和类等要素命名时使用的字符序列成为标识符
技巧:凡是可以自己起名字的地方都叫标识符
定义合法标识符规则:

  • 由26个英文字母大小写,0~9,_或$ 组成
  • 数字不能开头
  • 不可以使用关键字和保留字
  • 严格区分大小写,长度无限制
  • 标识符 不能含有空格
    Java中的名称命名规范:
    包名:多单词组成时所有字母都小写:xxxyyyzzz
    类名:接口名:多单词组成时,所有首字母大写:XxxYyyZzz
    变量名、方法名:多单词组成时,第一个单词首字母小写,从第二个单词开始每个单词首字母小写:xxxYyyZzz
    常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

变量

概念:

  • 内存中的一个存储区域
  • 该区域的数据可以在同一个类型范围内不断变化
  • 变量是程序中最基本的存储单元。包含变量类型、变量名和存储值

作用:用于在内存中保存数据
注意:

  • Java中的每个便令必须先声明,后使用
  • 使用变量名来访问这块数据的区域
  • 变量的作用域:其定义在一对{}内
  • 变量只有在作用域中才能生效
  • 同一个作用域不能定义重名的变量

基本数据类型(primitive type)

数值型

  • 整型(byte,short,int,long)
    byte 1字节(8bit位) -127 ~127
    short 2字节 -215~ 215-1
    int 4字节 -231~231-1
    long 8字节 -263~263-1
    注意:声明long型常量须后加'l'或'L'
  • 浮点型(float,double)
    float(单精度) 4字节 (7位有效数字) -3.403E38~3.403E38
    double(双精度) 8字节 -1.798E308~1.798E308
    注意:Java的浮点型常量默认位double类型,声明float型常量需要在后面加'f'或'F'

字符型(char)

char 2字节 声明char型变量通常使用单引号'' 反义字符''

布尔型(boolean)

只能取两个值之一:true,false

基本数据类型注意点:

  1. 自动类型提升
    byte、short、char --> int --> long --> float --> double
    结论: 当容量小的数据类型的变量和容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型,特别的:当byte,short,char三种类型做运算时结果为int类型(包括同种类型之间做运算)
    容量大小表示数的范围大和小并不是内存中所占字节的大和小比如:float容量要大于long的容量
  2. 强制类型转换:自动类型提升的逆运算
    1. 需要使用强转符:()
    2. 注意点:强制类型转换,可能导致精度损失。
      特殊情况:
      long l = 123123进行了自动类型提升,他认为123123是int型从而不用加l
      long l = 12312312312312312会报错,后边的值超过int类型的大小所以后边必须加l
byte b = 12;
byte b1 = b+1;//报错,整型默认类型为int型,浮点型常量默认类型为double类型
float f1 = b +12.3;//报错

引用数据类型(reference type)

该数据类型在创建的时候,会先在堆内存中分配一块空间,存储对象的具体信息,然后在栈中存储该对象的地址信息,
1、引用数据类型是由类加载器创建的,他们是用于访问对象的;
2、任何引用数据类型的默认值都为空。
3、不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
4、一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
5、一个引用数据类型可以被用于任何生命类型和兼容类型的对象;

字符串类型:String

  • String属于引用数据类型,字符串
  • 声明String 类型变量使用一堆"" String s1 = "123"
  • String可以和8中基本类型变量做运算,且运算只能是连接运算:+
int number = 1001;
String numberStr = "学号";
String info = number + numberStr; //10001学号 ”+“连接运算符

char a = ''//编译不通过

类(class)(字符串在这)

接口(interface)

数组([]array)

进制

所有数字在计算机底层都以二进制形式存在。
对于整数,有四种表示方式:

  • 二进制(binary):0,1,满2进1,以0b或0B开头
  • 十进制(decimal):0-9,满10进1
  • 八进制(octal):0-7,满8进1 以数字0开头
  • 十六进制(hex):0-9及A-F,满16进1,以0x或0X开头表示,此处的A-F不区分大小写。如0x21AF+1=0x21B0

计算机底层都以补码的方式来存储数据
关于原码,补码,反码:
正数的原码补码和反码都一样
负数的原码为正数的符号位变为1,反码为除符号位取反,补码为反码+1。
有补码求原码:先将补码-1,再除符号位外,取反

十进制转换为二进制:除二取余的逆 比如 13 13除以2 商6余1 6除2 商3余0 3除2 商1余1 1除以2 商0余1 0除以2 商0余0 后将余数取反为 1101
十进制转换为其他进制可先转换为二进制,在转换为其他进制
二进制转换为八进制取三位为一位,反之亦然
二进制转换为十进制取四位为一位,反之亦然

运算符

  • 算术运算符
    1. 正号"+"
    2. 负号"-"
    3. 加"+"
    4. 减"-"
    5. 乘"*"
    6. 除"/" 除数和被除数中含有浮点型变量,结果为浮点型
    7. 取模(取余)"%" 结果的符号与被模数相同
    8. 自增 ++(前:先运算后取值,后:先取值后运算) 不会改变变量自身的数据类型
      • 举例:a = 2; b = a ++; 结果:a = 3; b = 2;
        a = 2; b = ++a 结果:a=3;b=3
    9. 自减 -- (前:先运算后取值,后:先取值后运算)
    10. 字符串连接 +
  • 赋值运算符
    符号: "="
    当"="两侧数据类型不一致时,可以使用自动类型转换或者使用强制类型转换原则进行处理
    支持连续赋值
int i1 = 10;
int j1 = 10;
int i2,j2;
i2 = j2 = 10;
int i3=10,j3=20;

扩展运算符:+=,-=,*=,/+,%= 不会改变本身数据类型

int a = 10;
a += 10; //相当于a = a+10;
  • 比较运算符 比较结果不是true 就是false

    1. == 是否相等
    2. != 是否不等
    3. >
    4. <
    5. >=
    6. <=
    7. instanceof 检查是否是类的对象 "hello" instanceof String --- true
  • 逻辑运算符 逻辑运算符操作的都是boolean类型的变量

    1. & 逻辑与
    2. | 逻辑或
    3. ! 非
    4. && 短路与
    5. || 短路或
    6. ^ 逻辑异或
      区分& 和 &&:运算结果相同,符号左边是true时,二者都会执行符号右边的运算,符号左边时false时,&&不会执行符号右边的运算(|| 和| 同理,左边为true ||不会执行后边的操作)
  • 位运算符 (整数类型)
    << 左移 空位补0,被移除的高位丢弃,空缺位补0 在一定范围内,每向左移几位相当于原来数的大小乘于移动的位数
    >> 右移 被移位的二进制最高位是0,右移后空缺位补0,最高位是1,右移后空缺位补1 在一定范围内,每向右移动几位相当于原来的数的大小除以2
    >>> 无符号左移 空缺位都用0补
    & 与运算 0 看作false 1看作true
    | 或运算
    ^ 异或运算 交换两个数字的值 (num1^num2)^num1 = num2
    ~ 取反运算

  • 三元运算符
    (条件表达式)?表达式1:表达式2 条件表达式为true 执行表达式一 反之执行表达式二

  • 运算符的优先级:
    image

流程控制

顺序结构

  • 程序从上到下逐行地执行,中间没有任何的判断和跳转

分支结构

  • 根据条件,选择性的执行某段代码
  • 有if...else...和switch-case两种分支语句
if(){
}else if(){
}else{
}

补充1:(如何从键盘获取不同类型的变量,需要使用Scanner类)
具体实现步骤:

  1. 导包:import java.util.Scanner
  2. Scanner的实例化 Scanner scanner = new Scanner(System.in); int num = scanner.nextInt();
    注意:需要根据对应的方法,来输入指定的类型。如果输入的数据类型与要求的类型不匹配,会报异常:InputMisMatchException,导致程序终止
    补充2:(如何获取随机数)
    double value = Math.random();[0.0,1.0) 乘100 0.0
    例:生成一个10-99的随机数:(int)Math.random*(99-10+1)+10
    公式:生成一个[a,b)的随机数。 (int)Math.random*(b-a+1)+a

关于if...else...

  1. else结构是可选的
  2. 针对于条件表达式:如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句的顺序无所谓,如果多个条件表达式之间有交集的关系,需要根据实际情况考虑清楚,应该把哪个条件写到上边
  3. if-else是可以嵌套的

关于switch-case结构
switch(表达式){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
case 常量n:
语句n;
break;
dafault:
语句;
break;
}
注意:
1、根据switch中的值依次匹配各个case的常量,一旦匹配成功,则进入相应case结构,调用其执行语句,当调用完执行语句之后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止
2、break,可以在switch-case中,一旦执行到此关键字,就跳出该switch-case
3、switch结构中的表达式,只能是如下6中数据类型之一:byte、short、char、int、枚举类型(5.0)和String类型(7.0)
4、case后边必须跟常量,不能声明范围
5、default:相当于ifelse中的else,default也是可选的,而且位置是灵活的
6、如果switch-case结构中的多个case的执行语句相同,可以考虑合并

循环结构

  • 根据循环条件,重复的执行某段代码
  • 有while,do...while...、for三种循环语句
  • jdk1.5提供了foreach循环方便遍历集合、数组元素
  1. 循环结构的4个要素
    1. 初始化条件
    2. 循环条件---是boolean类型
    3. 循环体
    4. 迭代条件
  2. for循环结构
    for(1;2;4){
    3
    }
    执行过程:1-2-3-4
  3. while循环结构
    1
    while(2){
    3,4
    }
    执行过程1,2,3,4
  4. do...while循环
    1
    do{
    3,4
    }while(2);
    执行过程:1,3,4,2 do...while...do里面的至少执行一次循环体
  5. break和continue
    break:结束当前循环
    结束指定标签的for循环:
label:for(;;){
for(;;){
break label;
}
}

continue:结束当次循环

衡量一个功能代码的优劣:

  1. 正确性
  2. 可读性
  3. 健壮性
  4. 高效率与低存储:时间复杂度,空间复杂度(衡量算法的好坏)
posted @   生活的样子就该是那样  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示