JavaSE学习总结:基本语法

1.标识符

标识符的命名规则

  • 可以又大小的英文字母,0-9的数字,下划线,美刀$
  • 数字不能作为开头
  • 不能使用java中的50个关键字和保留字go/const,3个特殊值true/false/null
  • 严格区分大小写
  • 不能使用空格

标识符的命名规范

  • 包:所有字母都小写,xxx.yyy.zzz
  • 类名/接口名:所有单词的首字母大写,XxxYyyZzz
  • 变量名/方法名:第一个单词的首字母小写,其余大写,xxxYyyZzz
  • 常量名:所有字母都大写,每个单词用_连接。XXX_YYY_ZZZ

2.变量

概念

  • 代码一块内存空间,使用变量名来访问和使用这块空间

变量的特点和作用

  • 概念:一块内存中的数据存储空间的标识
  • 特点:里面的内容可以修改,一个变量只能存储一个值,有数据类型、变量名、值三部分组成,缺一不可。
  • 作用:保存数据

如何声明和使用

  • 声明的格式:数据类型 变量名
  • 变量的赋值:变量名 = 值(常量、变量、表达式)
  • 使用:直接用变量名即可

注意事项

  • 先声明后使用
  • 变量要有初始值
  • 变量有作用域

3.数据类型

基本数据类型

整型

  • byte:一个字节,范围-128~127
  • short:两个字节,范围-32768~32767
  • int:四个字节,范围大概十位数
  • long:八个字节,须在数字后面加L,123456799L

浮点型

  • float:四个字节,小数的十进制科学计数法,大概小数点后6~7位
  • double:八个字节,小数的十进制科学计数法,大概小数点后15~16位

字符型

  • char:2个字节,因为是2个字节,所以一个中文汉字,也可以表示一个字符 char c = ‘中’;Java中使用Unicode值来表示每一个字符,至于这个Unicode值在底层怎么存,这个要和与具体的编码方式相结合,编码方式有:GBK,UTF-8,ISO8859-1等。

  • 注意:
    -(1)字符常量需要使用单引号’’,单引号中有且只能有一个字符。如果有多个字符,就需要使用"",变成字符串类型,就是String类型。字符型 char c = ‘a’;char c =’’;(错误)字符串类型 String str = “hello”;双引号中,需要0~n个字符,String str = “”;空字符串。

  • (2)字符还可以转义字符,无法用一个字符表示的符号,回车 \r,换行 \n,退格 \b,制表位 \t。

  • 在Java中有特殊意义的标点符号,单引号 ’

  • 双引号 "

  • 斜杠本身 \

  • (3)字符的表示可以使用Unicode值 \u000a

布尔型

  • boolean 只有两个值true和false

引用数据类型

  • 类 String,System
  • 接口 interface
  • 数组 ArrayList

数据类型的转换

  • 基本数据类型的转换

  • 自动类型转换

  • 存储容量小的值或变量赋值给存储容量大的,或者存储容量小的与存储容量大的进行混合运算,出现存储容量小的会自动转成存储容量大的类型

  • byte,short,char --> int --> long -->float -->double

  • 因为float和double类型的存储方式不一样,因此8个字节的long可以转成float而不会溢出

  • float和double 存储是分为:符号位,指数部分,尾数部分

  • 强制类型转换

  • 把存储容量大的常量值/变量/表达式的值赋值给存储容量小的变量时

  • 需要使用强制类型转换符()

  • 强制类型转换有风险:溢出,损失精度

4.运算符

算术预算符

  • 、正号 + int a = 10;
  • 负号 -
    
  • 加法 + int c = a + b;
  • 减法 - int c = a - b;
  • 乘法 *
  • 除法 / 特殊:两个整数相除,只保留整数部分;两个整数相除时,除数不能为0,否则报错;两个浮点数相除时,除数为0的话,结果是Infinity。
  • 取模 % 求余数,特殊:模数的负号会被忽略
  • 自增 ++ 运算的规则:1、对于自增变量本身来说,无论++在前还是在后,自增变量本身都会自增1;2、但是对于自增表达式来说,++在前还是在后的结果是不同1)a++ 这个表达式的值与a自增之前的值相同;2)++a 这个表达式的值与a自增之后的值相同
  • 自减 – 类似于自增

逻辑运算符

  • 逻辑与 & true & true才为true,其他的都为false
  • 逻辑或 | 左右两边有一个为true,结果就为true
  • 逻辑非 ! !true为false , !false为true
  • 逻辑异或 ^ 左右两边必须是一个为true,一个为false,结果采为true,否则为false
  • 短路与 && 如果&&的左边的值为false,右边的就不看了,结果直接为false
  • 短路或 || 如果||的左边的值为true,右边的就不看了,结果直接为true
  • 逻辑运算符的操作数,必须是布尔值

赋值运算符

  • 基本赋值运算符 = 表示把=右边的值赋值给左边的变量
  • 扩展赋值运算符 += 把左边的变量的值,与右边整个表达式的值相加,最后赋值给左边的变量,如果左右两边的类型不一致,会隐含有类型转换。
  • -= *= /= %= 同上

比较运算符

  • 大于 >
  • 小于 <
  • 大于等于 >=
  • 小于等于 <=、
  • 等于 == 注意和赋值运算符区分
  • 不等于 != 注意:比较表达式的结果一定布尔值,要么为true,要么为false
  • 如果要表示 a变量在[0,100] 0<=a<=100,0<=a && a<=100

条件运算符

  • 三元运算符: 条件表达式 ? 结果表达式1 : 结果表达式2
  • 如果条件表达式的结果为true,那么整个表达式的结果就取 “结果表达式1”的值,否则就取“结果表达式2”的值

位运算符

  • 左移 << 右边补0
  • 右移 >> 左边补什么,看最高位,最高位是0,补0,最高位是1,补1
  • 无符号右移 >>> 左边直接补0
  • 按位与 1 & 1结果才为1,其他都是0
  • 按位或 0 | 0结果采为0,否则都是1
  • 按位异或 1 ^ 0 或 0 ^ 1是1,其他都是0
  • 位取反 1就是0,0就是1
  • 常用于底层对数据的操作,运算数度快。

上述的运算都是针对基本数据类型的,有三个比较特殊的运算符。

    • 可以用于字符串的拼接,java在底层做了运算符的重载。为了保证代码的简洁和安全性,自己不能去定义运算符的重载。
  • == 可以用于引用数据类型的“地址”的比较,在没有重写toString方法时,equals就是用 == 实现的比较功能。
  • = 可以用于引用数据类型变量的赋值

运算符的优先级

  • ( ) >算术运算符 >关系运算符>逻辑运算符>三元运算符>赋值运算符
  • 在自己不确定优先级的时候,一律使用()进行显示的区分,不要炫耀技术,写一些复杂的一连串的运算,除了骗自己,你是骗不了编译器,这和高级语言设计的初衷背道而驰,这无疑是浪费时间(这都和某浩强的c语言书籍学的吗?)

5.流程控制

顺序

  • 程序从上往下执行

分支

if

  • 单分支,语法:语法:if(条件){语句}
    1) 执行顺序:判断条件是否成立,如果成立执行后面的语句。
    2) 条件一般是: boolean的变量、关系表达式、逻辑表达式 , 最终结果肯定是 true|false

  • 双分支 语法:if(条件){语句1}else{语句2}
    1)执行顺序: 判断条件是否成立,如果成立执行语句1,否则 执行语句2
    2) 条件一般是: boolean的变量、关系表达式、逻辑表达式 , 最终结果肯定是 true|false

  • 多重分支 语法: if(条件1 ){语句1} else if(条件2){语句2} 。。。else{语句n}
    1)执行顺序:先判断条件1,如果成立执行语句1,否则判断条件2 ,如果成立执行语句2,以此类推,如果都不成立执行 语句 n
    2) 条件一般是: boolean的变量、关系表达式、逻辑表达式 , 最终结果肯定是 true|false
    3)注意事项: else 可以省略,但不能提到前面

  • 嵌套if 语法:if(条件){ if(条件){}}else{if(){}}
    1)执行顺序:先判断外层if的条件,如果成立,才去判断内部if的条件
    2)if、else if、else后面的大括号都可以省略,默认执行第一句,只是不建议省略,可读性差

switch

-switch(变量或表达式){

case 常量值1: 语句1;break;
case 常量值2: 语句2;break;


default: 语句n;break;

}

  • 先去判断switch变量或表达式的值,依次从上往下和各个case去匹配,如果有匹配的,执行对应的后面的语句,直到遇见break为止。如果没有匹配的,则执行default后面 的语句,直到遇见break为止。

  • 1.常量值不能重复

  • 2.switch判断 的变量类型 只能是 int或char、short、byte、枚举、String(jdk1.7以后)

  • 3、default可以省略,也可以提到前面

  • 4、break可以省略

if 和 switch 的对比

  • 能用switch的,肯定能用if,反之,能用if的,不一定能用switch。条件: 等值判断、类型必须满足switch所需类型、多重分支

循环

优点

  • 1.代码简洁,优雅
  • 2.易修改

四要素

  • 循环变量初始化
  • 循环条件
  • 循环操作(循环体)
  • 循环变量更新

分类

  • while
    1)语法
    循环变量初始化
    while(循环条件){
    循环操作
    循环变量更新
    }
    2)执行顺序
    循环变量初始化 ①
    while(循环条件){ ② ⑤
    循环操作 ③
    循环变量更新 ④

}

  • do while
    1)语法
    循环变量初始化
    do{
    循环操作
    循环变量更新
    }while(循环条件);

    2)执行顺序
    循环变量初始化 ①
    do{
    循环操作 ② ⑤
    循环变量更新 ③ ⑥

}while(循环条件); ④ ⑦

  • for
    1)语法
    for(循环变量初始化; 循环条件; 循环变量更新){
    循环操作
    }
    2)执行顺序
    ① ② ⑤ ④
    for(循环变量初始化; 循环条件; 循环变量更新){

     循环操作  ③
    

}

3)注意点:
1、两个分号必不可少
2.三个表达式 可以省略,但有可能造成死循环
3.表达式1可以有多个变量声明,但必须是同一类型,但用逗号隔开

表达式3可以有多个变量更新,用逗号隔开

for(int i=0,double j=6;😉{错误的!!!!
}

  • 增强for
    1)语法
    for(元素数据类型 变量:数组或者Collection集合){使用变量即可}{
    循环操作
    }
    2)注意:增强for不会对原来的数组或是集合进行操作,而是对自定义的变量进行操作。即,不能不会改变源数据的内容,适合在读取数据操作。

  • 嵌套循环

一个循环中又嵌套了另一个完整的循环结构
三种循环中,都可以嵌套另外一种任意的循环结构
先执行外层循环,然后执行内层循环
二维图形题,如 等腰三角形

案例

  • 1.1-100求和
1for循环

int sum = 0;

for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1到100累加的和为:" + sum);


2while循环

int sum = 0;
int i = 1;
while (i <= 100) {
sum += i;
i++;
}
System.out.println("1到100累加的和为:" + sum);


3do...while循环

int sum = 0;
int i = 1;
do {
sum += i;
i++;
} while (i <= 100);
System.out.println("1到100累加的和为:" + sum);
    1. 水仙花数
 * 需求:在控制台输出所有的”水仙花数”
    * 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
    * 举例:153就是一个水仙花数。
    * 153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
    分析:
    1,100 - 999
    2,获取每一个位数的值,百位,十位,个位
    3,判断各个位上的立方和是否等于这个数,如果等于打印
*/
 
class Test3_Flower {
 
    public static void main(String[] args) {
 
        for (int i = 100;i <= 999 ;i++ ) {                    //获取100到999之间的数
 
            int ge = i % 10;                                //123 % 10
 
            int shi = i / 10 % 10;                            //12 % 10;
 
            int bai = i / 10 / 10 % 10;                        //1 % 10
 
 
 
 
 
            if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
 
                System.out.println(i);
 
            }
 
        }
 
    }
 
}
  • 3.统计顾客年龄
public class homework01 {

    public static void main(String[] args) {
        double  xia =0;
        double shang=0;
        double bili;
        double bili1;
        for(int i=1;i<=10;i++){
            Scanner input=new Scanner(System.in);
            System.out.println("请输入第"+i+"位顾客的年龄:");
            int age=input.nextInt();
            
            if (age<=30) {
                xia++;
            }else{
                shang++;
            }
            //bili表示30岁以下的比例,bili1表示30岁以上的比例
            
            
        }
        bili=xia/10*100;
        bili1=shang/10*100;
        System.out.println("30岁以下的比例"+bili);
        System.out.println("30岁以上的比例"+bili1);
    }
}
  • 4.不断输入姓名,直到输入 q 停止


 while (true) {

                Console.WriteLine("请输入学生姓名");
                string a = Console.ReadLine();
                if (a == "q") {
                    Console.WriteLine("结束");
                    break;
                }
            }

  Console.WriteLine("请输入学生姓名");
                string a = Console.ReadLine();
                while (a != "q") {
                    Console.WriteLine("请输入学生姓名");
                    a = Console.ReadLine();
                  
                }
                Console.WriteLine("请按任意键退出");
                Console.ReadKey();
           


  • 5.1-100 的偶数打印
 public class Cto {
    public static void main(String[] args) {
        System.out.println("1~100所有的偶数为:");
        //遍历1~100
        for(int i=1; i<=100; i++){
            if (i%2 == 0) {
                System.out.println(i);
            }
        }
    }
}

跳转

  • break 只能 用在switch或循环中,用于跳出所在的最近的循环或switch
  • continue 只能用在循环中,结束本次循环,继续下一次循环
  • return 用于跳出所在的方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值