Java基础语法与流程控制

跟着狂神学Java的第二天O(∩_∩)O~,养成一个总结的习惯

志同道合的小伙伴可以一起学习狂神的视频

本节地址:https://www.kuangstudy.com/course/play/1317504142650658818

Java基础语法

1. 注释

​ Java注释有单行注释多行注释文本注释三种

  • 单行注释:用双斜线//后面跟要注释的内容

    eg://我是一条注释

  • 多行注释:用/*开始,用*/结束,在中间写注释的内容

    eg:

    /*多行注释
    我是一条注释
    我也是一条注释
    我也是一条注释
    */
  • 文本注释(用于JavaDoc注释):/** */

    eg:

     /**
    * @Description HelloWorld
    * @Author yl
    */

2. 关键字和标志符

  • 关键字

  • 标志符

    Java的所有组成部分都需要名字。类名、变量名以及方法名都被称之为标志符。

    • 所有的标志符都应该以字母(a-z,A-Z),美元符($)、或者下划线(_)开头

    • 首字母之后可以是字母,美元符,下划线,数字的自由组合

    • 不能使用关键字作为变量名或方法

    • Java对大小写敏感!

3. Java数据类型

  • 八大基本类型

    //八大基本类型
    int num1=220000000; //占4个字节
    byte num2=100; //占1个字节
    short num3=10000; //占2个字节
    long num4=234239809L;//long类型要在数字后面加一个L 占8个字节 float num5=30.5F;//float在数字后面加一个F
    double num6=4.14242353423; char name='狂'; //占1个字节
    boolean flag=true; //占1个字节
  • 引用类型

    类,接口,数组

4. 数据类型扩展

//整数拓展: 进制 二进制0b    十进制     八进制0    十六进制0x
int i=10;
int i2=010;//八进制0
int i3=0x10;//十六进制0x 0~9 A~F
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("================================"); //================================
//浮点数拓展 银行业务怎么表示?钱
//BigDecimal 数学工具类
//================================
//float 有限 离散 舍入误差 大约 接近但不等于
//double
//最好完全避免使用浮点数进行比较
float f=0.1f;//0.1
double d=1.0/10;//0.1
System.out.println(f==d);//false float d1=2342342345823478324234F;
float d2=d1+1;
System.out.println(d1==d2);//true //================================
//字符拓展
//================================
System.out.println("================================");
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println((int)c1);
System.out.println(c2);
System.out.println((int)c1); //所有的字符本质还是数字
//编码 Unicode 表:(97=a 65=A) 2字节
//U000 UFFF
char c3='\u0061';
System.out.println(c3);//a //转义字符
// \t 制表符
// \n 换行
System.out.println("Hello\nWorld!");

5. 类型转换

//强制类型转换  高->低
//自动转换 低->高 /*注意点
* 1.不能对布尔值进行转换
* 2.不能把对象类型转换为不相干的类型
* 3.在把高容量转换到低容量的时候,强制转换
* 4.转换的时候可能存在内存溢出或者精度问题
* */

6. 变量,常量,作用域

​ 变量:会变的量(类变量,实例变量,局部变量)

​ 常量:不会变的量

​ 作用域:作用范围

​ eg:

public class Demo06 {
//类变量 static
static double salary = 2500; //属性 :变量 //实例变量:从属于对象;如果不自行初始化,则为这个类型的默认值 0 0.0 u000
//布尔值:默认是false
//除了基本类型,其余的默认值都是null
String name;
int age; //main方法
public static void main(String[] args) {
//局部变量,必须声明和初始化值
int i=10;
System.out.println(i); //变量类型 变量名字 = new Demo06();
Demo06 demo06 = new Demo06();
System.out.println(demo06.age);
System.out.println(demo06.name); //类变量
System.out.println(salary);
}
//其他方法
public void add(){ }
}

变量命名规范:

/**变量命名规范
*所有变量、方法、类名:见名知意
*类成员变量:首字母小写和驼峰原则:monthSalary 除了第一个单词以外,后面的单词首字母大写
*局部变量:首字母小写和驼峰原则
*常量:大写字母和下划线:MAX_VALUE
* 类名:首字母大写和驼峰原则:Man,GoodMan
* 方法名:首字母小写和驼峰原则:run(),runRun()
*/

7. 基本运算符

  • 算术运算符:+,-,*,、,%,++,--

  • 赋值运算符:=

  • 关系运算符:>,<,>=,<=,==,!=instanceof

  • 逻辑运算符:&&,||,!

  • 位运算符:&,|,^,~,>>,<<

  • 条件运算符:?:

  • 扩展赋值运算符:+=,-=,*=,/=

    需要注意的是除法/,整数的除法是向下取整的

    int a=5/3;
    System.out.println(a);//输出的是1

8. 自增自减运算符

//++ --  自增,自减  一元运算符
int a = 3; int b = a++;
int c = ++a; System.out.println(a);//a=5
System.out.println(b);//b=3
System.out.println(c);//c=5

​ 拿上面的代码进行说明:

​ ++表示自增即自己+1,但是放在前面和放在后面效果是不一样的:

int b=a++;其实相当于int b=a;a=a+1; ,也就是先把a的值赋给b,再把a的值增加1;

int c=++a;其实相当于a=a+1; int c=a;,因此是先把a的值加1,然后再赋给c;

​ 那么上面的代码转化一下就是:

int a = 3;

int b = a;//此时b=3;
a=a+1;//此时a=4; a=a+1;//此时a=5;
int c = a;//此时c=5;
System.out.println(a);//a=5
System.out.println(b);//b=3
System.out.println(c);//c=5

因此会输出5 3 5

9.逻辑运算符与位运算符

  • 逻辑运算符:&&,||,!(与,或,非)

    &&:逻辑与,二者同时成立结果为真,否则为假

    ||:逻辑或,只要有一个为真结果就为真,否则为假

    !:逻辑非:对原来的结果取反,真变假,假变真

    特别注意:&&和||都具有短路运算的性质

    所谓短路性质:例如A&&B,当A已经判断出是假了,就不会再判断B了,因为不管B是真是假,结果都是假,同理A||B,当A判断为真也不会再判断B了,因为只要有一个为真结果就是真。

    eg:

    //短路运算
    int c = 5;
    boolean d= (c<4) && (c++<5);//因为前面已经判断为false了,&&的结果肯定为false,后面的条件不用再判断
    System.out.println(d);//false
    System.out.println(c);//5 //下面同理短路运算
    int e = 5;
    boolean f = (e<6) || (e++<7);
    System.out.println(f);//true
    System.out.println(e);//5
  • 位运算符:&,|,^,~,<<,>>,

    位运算符都是对二进制位进行操作的。

    &:按位与:两个数逐位进行与运算,每一位的规则为二者都为1结果为1,否则为0

    |:按位或:两个数逐位进行或运算,每一位的规则为二者至少有1个1结果为1,否则为0

    ^:按位异或:两个数逐位进行异或运算,每一位的规则为相同为0,不同为1

    ~:按位非:二进制每一位0变1,1变0

    A = 0011 1100
    B = 0000 1101 A&B =0000 1100
    A|B =0011 1101
    A^B =0011 0001
    ~B = 1111 0010

    <<:左移

    左移n位相当于乘以2的n次方

    >>:右移

    右移n位相当于除以2的n次方

    位移操作会比乘除法效率高很多

10. 三元运算符

​ "? :"是一个三元运算符,相当于if else

eg: int c=a>b?a:b;的意思相当于以下语句:

if(a>b){
c=a;
}
else{
c=b;
}

Java流程控制

1. 用户交互Scanner(输入)

System.out.println()可以实现输出到控制台,但是如何进行输入呢?Java提供了Scanner方法,先new一个Scanner对象,这个对象你自己起个名。

eg:Scanner s = new Scanner(System.in);

(举个可能不太恰当的比喻,假设你现在需要写字,Scanner就相当于文具店,System.in就相当于是笔,你new一个Scanner(System.in)就相当于你买了一只笔,这个s就相当于你给自己的笔起了一个名字:xxx的专属神笔,接下来你可以用你的神笔写字了。。。)

​ (如果你没有作业要写你也不会拿笔写字对吧,所以你可以先判断一下你需不需要写字)

​ 可以用hasNextLine()或者hasNext()方法判断一下还有没有输入,eg:if(s.hasNextLine())

​ 如果有的话,可以用一个变量来接收输入的数据,eg:String str = s.nextLine();//能接收空格(不用nextline()用next()也可以,但是无法接收空格)

​ 然后还有个特别重要的事情!!输入完一定要关闭Scanner,否则会一直占用资源!!!(就像你写完作业了总要把笔帽盖上,不然你的墨就没了。。)可以使用close()进行关闭,eg:s.close();

​ 完整示例如下:

public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner s = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if(s.hasNextLine()){
//String str = s.next();//不能接收空格
String str = s.nextLine();//能接收空格
System.out.println("输出内容为:\n"+ str);
}
//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯
s.close();
}

2. Scanner进阶

​ 上面的Scanner只是学习了字符串(文本)的输入,如果要输入整数,浮点数之类的怎么办呢?

​ 同样的道理,先new一个Scanner(相当于拿一支笔出来),Scanner s = new Scanner(System.in);

​ 然后可以用s.nextInt();输入int类型的整数,或者用s.nextFloat();输入float类型的浮点数。

​ 当然肯定不止这些啦,还有nextLong(),nextDouble()等等很多种输入方法,需要什么就用什么。

​ eg:

public static void main(String[] args) {
Scanner s = new Scanner(System.in);
//从键盘接收数据
int i = 0;
float f = 0.0f; System.out.println("请输入整数:");
if(s.hasNextInt()){
i = s.nextInt();
System.out.println("整数数据:"+i+"\n");
}else{
System.out.println("输入的不是整数");
} System.out.println("请输入小数:");
if(s.hasNextFloat()){
f = s.nextFloat();
System.out.println("小数数据:"+f+"\n");
}else{
System.out.println("输入的不是小数");
}
s.close();//千万不要忘记关掉
}

3. 顺序结构

​ 挺简单,Java的基本结构就是顺序结构,除非特别指明,不然就是从上往下依次执行。

4. If选择结构*

​ 很重要,后面会用的很多。If选择结构有If单选择结构,If双选择结构,If多选择结构和If嵌套结构。

  • If单选择结构

    很好理解,如果条件成立就执行,不然不执行,使用if语句(假如你考了90分,就可以玩游戏,否则免谈)

    eg:

    if(score>=90){
    System.out.println("你可以玩游戏");
    }

    关于条件判断,if会总是判断条件是不是成立(是不是true),那么对于一个boolean类型的变量,可以两种方式:

    boolean flag=true;
    if(flag == true){...}
    //也可以直接写 if(flag){...}
  • If双选择结构

如果条件成立就执行语句1,否则执行语句2,使用if...else语句(上面说的假如你考了90分,就可以玩游戏,但是没考到呢?那就乖乖做家务~)

if(score>=90){
System.out.println("你可以玩游戏");
}
else{
System.out.println("乖乖做家务");
}
  • If多选择结构

生活中肯定会遇到不止两种选择的情况啦,就像你扔一个骰子,都有六种情况对吧。(次次都要考90分以上,鸭梨山大有木有啊~所以呢你亲爱的mother决定改进一下,如果你考到80分了, 可以给你玩一小会游戏)采用if...else if...else语句

if(score>=90){
System.out.println("你可以玩游戏");
}
else if(score<90 && score>=80){
//其实也可以直接写成else if(score>=80),因为上一个if不满足就相当于满足它的反面,也就是已经满足了score<90
System.out.println("你可以玩游戏");
}
else{
System.out.println("乖乖做家务");
}
  • If嵌套结构

    也很好理解,就是相当于有很多个不同的事情要去判断嘛(假如你的语文成绩xxx,你的数学成绩xxx,以及你的xx成绩xxx)

    if(chineseScore>=90){
    if(mathScore>=90){
    if(englishScore>=90){
    ...
    }
    else{
    ...
    }
    }
    else{
    ...
    }
    }

5. switch语句

​ switch也是一种选择语句,里面的expression就是待判断的表达式(可以是一个变量),对于每个case,如果满足就执行下面的语句。

​ 举个例子,假设现在要根据分数的等级(ABCD)输出不同的评语:

public static void main(String[] args) {
char score = 'A';
switch (score){
case 'A':
System.out.println("NB Plus!");
break;
case 'B':
System.out.println("good!");
break;
case 'C':
System.out.println("not so bad!");
break;
case 'D':
System.out.println("Come on!");
break;
default:
System.out.println("未知等级,输入错误!");
break;
}
}

​ 此时switch对score进行判断,满足了case 'A'因此执行完输出语句后break退出switch。那么不写break会怎样呢。如果把里面所有的break都去掉的话,会执行所有的语句,如下所示:

因为case语句具有穿透性,通俗来说就是没有break它不会停,会一直往后执行,因此要加上break。关于default,可写可不写,写了方便自己调错,不写也无碍。

关于case还有一个小技巧,假设要有多个case里面的语句一样,可以简写。例如判断月份天数,你可以老老实实的写12个case,12个输出语句。也可以这样写:

int month=10;
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("31天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("30天");
break;
case 2:
System.out.println("28天");//当然可以加个判断闰年29天,此处省略
break;
default:
System.out.println("未知月份,输入错误!");
break;
}

最后switch和if选择结构有啥区别呢?case的每个value都是固定的一个值,是离散的,而if判断的括号里面可以是连续的。举个例子吧,假设要判断分数,对于059判定为不及格,60100判定为及格,if只需要写if(score<60){...} else{...}就行了,但是switch要写101个case才行。如果分数里面还有小数的话,switch就做不到了。所以离散的判断二者都可,连续的判断只能用if。

6. while循环和do while循环*

​ while循环是最简单的循环。

while(布尔表达式){
要执行的语句;
}

​ 举个例子(开个玩笑):

boolean keJin=true;
while(keJin){
//等价于while(keJin==true),道理同if
System.out.println("爽");//氪金一时爽,一直氪金一直爽
}

只要while括号里面的条件满足,就会一直执行里面的语句,上述例子里面的keJin的值为true,一直满足,所以会一直输出

do while循环的话其实用的很少,了解一下就行了。

do{
要执行的语句;
}while(布尔表达式);//特别注意这儿有个分号

while和do while的区别就在于while是条件满足才执行,do while是先执行一次再判断是否满足条件,不满足就不再执行了。举个例子,你喜欢玩游戏,但是你妈不在家,while就相当于你先问你妈可不可以玩游戏,她同意了你就再一直玩;do while就相当于你不管三七二十一,直接开玩,玩了一会你才想起来要问你妈可不可以玩,她同意了你继续一直玩,不同意就不玩了。所以不管她同不同意,do while都能玩一会。

7. for循环*

​ for循环挺好用,很灵活,但是也那么一丢丢复杂。

for(初始值;布尔表达式;更新){//注意有两个分号
要执行的语句;
}
//eg:
for(int i=0;i<10;i++){
System.out.println("已经跑了"+i+"圈");
}

什么意思呢,假设你要去跑步,跑10圈,你的小伙伴帮你计圈,需要一个计圈的工具呀,你可以int i来当计圈工具,那么从第几圈开始计呢?还没开始跑呢肯定是从0开始啊,所以i的初始值就是0(当然其他情况不一定是0),需要计几次呢?他告诉你你已经跑了几圈了,所以当他告诉你已经跑了9圈的时候,你就知道你要冲刺了对吧,所以计到9就可以了,也就i<10就行了(当然你硬要i<=10也行,这里只是举个例子),这就是布尔表达式的意义,就是一个判断条件。当然,你每跑一圈,计数器得变对吧,不然每次都是第0圈,人傻掉,所以得i++;,每次加1,当然也不一定每次都是i++,i+=2,i+=3也可以啊,具体情况具体分析。

for循环的话还有很多的变式写法都是可以的:

for(int i=0;i<10;i++)//最标准的写法

int i;
for(i=0;i<10;i++)//把i的定义放在外面,赋值放在里面 int i=0;
for(;i<10;i++)//把i的定义和赋值都放在外面,但是分号不能省 int i=0;//把i的定义和赋值都放在外面,i的变化放在了括号里面,分号不能省
for(;i<10;){//其实把这俩分号去掉,for改成while,就是while循环的写法了
要执行的语句;
i++;
} for(;;)//死循环,无限执行

之前看到语法不过关的表白横幅Orz,可以看看运行结果是怎样的:

for(; ;);{System.out.println("I Love You!");}

8. for循环嵌套*

​ for循环嵌套也是很重要的,相当于把里层循环重复执行多次。

for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
System.out.println("i="+i+" j="+j);
}
}

​ 输出结果如下:

​ 练习:输出九九乘法表

​ 参考代码如下:

for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");//\t是制表符Tab,用于对齐
}
System.out.println();//每输出完一行,进行换行
}

9. break和continue

​ break在switch中的作用已经说了,在循环中的作用呢?

  • break:退出本次循环并结束掉当层循环(不执行本层后面剩余循环)

  • continue:退出本次循环,执行下一次循环

    打个可能不太恰当的比喻,循环相当于大家排队买奶茶,到break的时候奶茶店没有原材料了,那break买不了,后面的人也买不了吧,排队结束。

    continue相当于到他的时候他不想买了,那么他没买,他后面的人还是会买的吧。

    eg:

    public static void main(String[] args) {
    for(int i=1;i<=10;i++){
    if(i==5){
    continue;
    }
    System.out.println("i="+i);
    }
    }

    输出的结果为:

    把上面代码中的continue改为break后,结果为:

    特别注意,break只是结束当层循环,不是所有的循环:

    eg:

    public static void main(String[] args) {
    for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 5; j++) {
    if(j==3){
    break;
    }
    }
    }
    }

    上面例子中在里层for循环写了一个if(j==3) break;,只会结束里层j循环,不会结束外面的i循环,所以对于每次i循环,j循环到3的时候就会break,因此对于每个i,j只会输出0,1,2。

10. 增强for循环

//增强for循环,用于循环数组和集合
int []numbers = {10,20,30,40,50};//定义了一个数组
for(int x:numbers){
System.out.println(x);//输出结果为10 20 30 40 50
}

11. 关于循环的练习

  • 计算0~100奇数和,偶数和(结果为2500,2550)

    int oddSum = 0;//奇数和
    int evenSum = 0;//偶数和
    for(int i=0;i<=100;i++){
    if((i%2)==1) oddSum+=i; //这里也可以用位运算&来判断奇偶:if((i&1)!=0) 偶数&1的结果是0
    else evenSum+=i;
    }
    System.out.println("奇数和为:"+oddSum+"\n偶数和为:"+evenSum);
  • 用while或者for循环输出1-1000之间能被5整除的数,并且每行三个

int count=0;
for(int i=1;i<=1000;i++){
if(i%5==0){
System.out.print(i+" ");
count++;
if(count%3==0){//或者这里不用count,直接用if(i%15==0)也可以
System.out.println();
}
}
}
  • 输出如图所示的五行的三角形(拓展:n行三角形)

public static void main(String[] args) {
for(int i=1;i<=5;i++){
for(int j=1;j<=5-i;j++){
System.out.print(" ");//输出前面的空格
}
for(int j=1;j<=2*i-1;j++){
System.out.print("*");//输出*号
}
System.out.println();
}
}

Java基础语法与流程控制的更多相关文章

  1. Java基础语法(4)-流程控制

    title: Java基础语法(4)-流程控制 blog: CSDN data: Java学习路线及视频 1.程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定 ...

  2. Java基础语法02——流程控制

    流程控制:顺序结构.分支结构(if-else.switch-case).循环结构(for.while.do-while)

  3. Unit04: JavaScript 概述 、 JavaScript 基础语法 、 流程控制

    Unit04: JavaScript 概述 . JavaScript 基础语法 . 流程控制 my.js function f3() { alert("唐胜伟"); } demo1 ...

  4. Java基础之程序流程控制

    Java中的程序流程控制 Java中的程序流程分为三种结构:①顺序结构:②分支结构:③循环结构 一.顺序结构 Java中定义成员变量的时候,采用的是前向引用,也就是后面的变量可以引用之前定义好的变量. ...

  5. java 基础知识四 流程控制

    java   基础知识四 流程控制 Java流程控制包括顺序控制.条件控制和循环控制 顺序控制就是逐条执行 有if和switch两个分支 循环控制就是 又称为回路控制,根据循环初始条件和终结要求,执行 ...

  6. 《Java基础知识》流程控制

    流程控制分类: 一.顺序结构如果没有流程控制(即没有分支结构和循环结构),Java方法里面的语句是一个顺序执行流,从上到下依次执行每条语句. 二.分支结构1.if语句if语句使用布尔表达式或者布尔值作 ...

  7. Java基本语法--程序流程控制

    流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块.流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:顺序结构.分支结构.循环结构.本篇博客主要是对 ...

  8. 第2章 Java基本语法(下): 流程控制--项目(记账本)

    2-5 程序流程控制 2-5-1 顺序结构 2-5-2 分支语句1:if-else结构 案例 class IfTest1{ public static void main(String[] args) ...

  9. JavaSE基础语法学习-流程控制

    流程控制 用户交互Scanner Scanner**对象** 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner(System.in); 接下来我们演示一个最 ...

随机推荐

  1. (五)MySQL函数

    5.1  常用函数 5.2  聚合函数(常用) 函数名称 描述 COUNT() 计数 SUM() 求和 AVG() 平均值 MAX() 最大值 MIN() 最小值 ....   ....   想查询一 ...

  2. Git知识总结

    Git知识总结 Git安装 windows 在git官网中下载安装程序,然后按默认选项安装即可 安装完成后,在开始菜单里找到"Git"->"Git Bash&quo ...

  3. [cf1458D]Flip and Reverse

    将$s$中的01分别变为$1,-1$,即得到一个序列$a_{i}$(设其长度为$n$,下标范围为$[1,n]$) 对$a_{i}$建立一张有向图,其点集合为$Z$,并对$\forall 0\le k& ...

  4. Vue: 一个简单的Vue2.0 v-model双向数据绑定的实现,含源代码,小白也能看懂

    首先说一下原理吧 View层(dom元素)的变动如何响应到Model层(Js变量)呢? 通过监听元素的input事件来动态的改变js变量的值,实际上不是改变的js变量的值,而是改变的js变量的gett ...

  5. javascript-初级-day08

    return <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" ...

  6. adb server version (32) doesn't match this client (39); killing...解决办法

    输入今天遇到,安装AndroidSDK之后,已经配置好环境变量,输入adb可运行,但是输入adb devices之后就出现adb server version (32) doesn't match t ...

  7. Matlab 调用 Python 脚本

    Matlab 调用 Python 脚本 最近尝试在 Matlab 环境中调用 Python 脚本,这里总结下碰到的几个问题. 1. Python 模块加载 在 Matlab 函数中,想要将 Pytho ...

  8. 详细解析Thinkphp5.1源码执行入口文件index.php运行过程

    详细解析Thinkphp5.1源码执行入口文件index.php运行过程 运行了public目录下的index.php文件后,tp的运行整个运行过程的解析 入口文件index.php代码如下: < ...

  9. 【R绘图】当图例映射color/shape等多个属性时,如何修改图例标题?

    一般而言,我们修改ggplot2图例标题,常用以下三种方法: + guides(fill=guide_legend(title="New Legend Title")) + lab ...

  10. 65-Binary Tree Zigzag Level Order Traversal

    Binary Tree Zigzag Level Order Traversal My Submissions QuestionEditorial Solution Total Accepted: 6 ...