[关闭]
@scric 2016-09-26T09:07:45.000000Z 字数 11255 阅读 1791

JAVA学习

JAVA 学习 待更新


# 如何命名 Java 变量

1、变量名由多单词组成时,第一个单词的首字母小写,其后单词的首字母大写,俗称骆驼式命名法(也称驼峰命名法),如 myAge

2、变量命名时,尽量简短且能清楚的表达变量的作用,做到见名知意。如:定义变量名 stuName 保存 “学生姓名” 信息

3、PS: Java 变量名的长度没有限制,但 Java 语言是区分大小写的,所以 price 和 Price

## 使用规则

1、Java 中的变量需要先声明后使用
2、变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值
3、变量中每次只能赋一个值,但可以修改多次
4、main 方法中定义的变量必须先赋值,然后才能输出
5、虽然语法中没有提示错误,但在实际开发中,变量名不建议使用中文,容易产生安全隐患,譬如后期跨平台操作时出现乱码等等

# Java 中的数据类型

Java 语言是一种强类型语言。通俗点说就是,在 Java 中存储的数据都是有类型的,而且必须在编译时就确定其类型。

自动类型转换
1. 目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型
2. 目标类型大于源类型,如 double 类型长度为 8 字节, int 类型为 4 字节,因此 double 类型的变量里直接可以存放 int 类型的数据,但反过来就不可以了

Java 中的强制类型转换

例如,当程序中需要将 double型变量的值赋给一个 int型变量,该如何实现呢?

显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小。此时就需要通过强制类型转换来实现了。

  1. public class HelloWorld{public static void main(String[] args) {
  2. double heightAvg1=176.2;
  3. int heightAvg2=***(int)***heightAvg1;
  4. System.out.println(heightAvg1);
  5. System.out.println(heightAvg2);
  6. }
  7. }

Java 常量的应用

语法:final 常量名 = 值;

  1. public class HelloWorld{public static void main(String[] args)
  2. {
  3. final String Sex="男";
  4. final String Sex1="女";
  5. System.out.println(Sex);
  6. System.out.println(Sex1);
  7. }}

如何在 Java 中使用注释

Java 中的算术运算符
运算符

其中,++ 和 -- 既可以出现在操作数的左边,也可以出现在右边,但结果不同

运行结果:

  1. a=6
  2. b=6

  1. a=6
  2. b=5

一定要注意!自增和自减运算符只能用于操作变量,不能直接用于操作数值或常量!例如 5++ 、 8-- 等写法都是错误滴!
PS:% 用来求余数,也称为” 取模运算符 “

请在编辑器的指定行中输入代码实现功能

第 7 行:求取四个年龄的总和
第 8 行:求取四个年龄的平均值
第 9 行:求取 age1 和 age2 的差值
第 10 行:求取 age1 自减后的年龄

  1. package com.hello;
  2. public class hello{public static void main(String[] args) {
  3. int age1=24;
  4. int age2=18;
  5. int age3=36;
  6. int age4=27;
  7. int sum=age1+age2+age3+age4;
  8. double avg=sum/4;
  9. int minus=age1-age2;
  10. int newAge=age1--;
  11. System.out.println("年龄总和:"+sum);
  12. System.out.println("平均年龄:"+avg);
  13. System.out.println("年龄差值:"+minus);
  14. System.out.println("自减后的年龄:"+newAge);
  15. System.out.println("自减后的age1:"+age1);
  16. }
  17. }

Java 中的赋值运算符


请在编辑器中,空白处编写代码,应用赋值运算符实现如下结果:

  1. package com.hello;
  2. public class hello{public static void main(String[] args) {
  3. int one = 10 ;
  4. int two = 20 ;
  5. int three = 0 ;
  6. System.out.println("three=one+two==>"+(three=one+two));
  7. System.out.println("three+=one==>"+(three+=one));
  8. System.out.println("three-one==>"+(three-=one));
  9. System.out.println("three*=one==>"+(three*=one));
  10. System.out.println("three/=one==>"+(three/=one));
  11. System.out.println("three%=one==>"+(three%=one));
  12. }
  13. }

还有一种方法是

Java 中的比较运算符
比较运算符用于判断两个数据的大小,例如:大于、等于、不等于。比较的结果是一个布尔值( true 或 false )。

Java 中常用的比较运算符如下表所示:

  1. package com.hello;
  2. public class hello{public static void main(String[] args) {
  3. int a=16;
  4. double b=9.5;
  5. String str1="hello";
  6. String str2="imooc";
  7. System.out.println("a 等于 b:" + (a == b));
  8. System.out.println("a 大于 b:" + (a > b));
  9. System.out.println("a 小于等于 b:" + (a <= b));
  10. System.out.println("str1 等于 str2:" + (str1==str2));
  11. }
  12. }

注意:

1、 > 、 <、>= 、 <= 只支持左右两边操作数是数值类型

2、 == 、 != 两边的操作数既可以是数值类型,也可以是引用类型

Java 中的逻辑运算符
此处输入图片的描述
我们可以从 “投票选举” 的角度理解逻辑运算符:

1、 与:要求所有人都投票同意,才能通过某议题

2、 或:只要求一个人投票同意就可以通过某议题

3、 非:某人原本投票同意,通过非运算符,可以使其投票无效

4、 异或:有且只能有一个人投票同意,才可以通过某议题

当使用逻辑运算符时,我们会遇到一种很有趣的 “短路” 现象。

譬如:(one> two ) && (one < three) 中,如果能确定左边 one > two 运行结果为 false , 则系统就认为已经没有必要执行右侧的 one < three 啦。

同理,在 (one> two ) || (one < three) 中,如果能确定左边表达式的运行结果为 true , 则系统也同样会认为已经没有必要再进行右侧的 one < three 的执行!

Java 中的条件运算符
条件运算符( ? : )也称为 “三元运算符”。

语法形式:布尔表达式 ? 表达式 1 :表达式 2

运算过程:如果布尔表达式的值为 true ,则返回 表达式 1 的值,否则返回 表达式 2 的值

Java 中运算符的优先级

实际开发中,一般会使用小括号辅助进行优先级管理。
换句话说:所有运算符中,( ) 的优先级最高
例如:

Java 条件语句

if
if else

实现功能 “如果年龄大于等于 18 岁,则提示成年了,否则提示未成年”

  1. package com.hello;
  2. public class hello{public static void main(String[] args)
  3. {int age=25 ;
  4. if(age>=18)
  5. System.out.println("成年");
  6. else
  7. System.out.println("未成年");
  8. }}

多重 if 语句,在条件 1 不满足的情况下,才会进行条件 2 的判断;当前面的条件均不成立时,才会执行 else 块内的代码。

假设年龄大于 60 岁,则提示 “老年”;如果年龄介于 40 岁至 60 岁之间,则提示 “中年”;如果年龄介于 18 岁至 40 岁之间,则提示 “少年”; 18 岁以下则提示 “童年”

运行结果为: 少年

  1. package com.hello;
  2. public class hello{public static void main(String[] args)
  3. {int age=25 ;
  4. if(age>60)
  5. System.out.println("老年");
  6. else if(age>=40)
  7. System.out.println("中年");
  8. else if(age>=18)
  9. System.out.println("少年");
  10. else
  11. System.out.println("童年");
  12. }
  13. }

或者

  1. package com.hello;
  2. public class hello{public static void main(String[] args)
  3. {int age=25 ;
  4. System.out.println(age>60?"老年":age>40?"中年":age>18?"少年":"童年");
  5. }
  6. }

嵌套 if 语句

只有当外层 if 的条件成立时,才会判断内层 if 的条件。

例子

:预赛成绩大于 80 分的可进入决赛,然后根据性别再划分为男子组决赛和女子组决赛。

运行结果为: 进入女子组决赛

  1. package com.hello;
  2. public class hello{public static void main(String[] args)
  3. { int score = 94;
  4. String sex = "女";
  5. if(score>=80){
  6. if(sex.equals("女"))
  7. System.out.println("进入女子组决赛");
  8. else
  9. System.out.println("进入男子组决赛");
  10. }
  11. else
  12. System.out.println("不进入决赛");
  13. }
  14. }

Java 条件语句之 switch
当需要对选项进行等值判断时,使用 switch 语句更加简洁明了。例如:根据考试的名次,给予前 4 名不同的奖品。第一名,奖励笔记本一台;第二名,奖励 IPAD 2 一个;第三名,奖励移动电源一个;最后一名奖励 U 盘一个。

执行过程:当 switch 后表达式的值和 case 语句后的值相同时,从该位置开始向下执行,直到遇到 break 语句或者 switch 语句块结束;如果没有匹配的 case 语句则执行 default 块的代码

此处输入图片的描述

注意:

1、 switch 后面小括号中表达式的值必须是整型或字符型

2、 case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2

3、 case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束

请在代码编辑器中,使用 switch 语句补全代码,设置属于你的菜谱:如果今天是星期一、三、五,则早餐吃包子,如果是星期二、四、六,则早餐吃油条,如果是星期日,则吃 “主席套餐”

运行结果为: 吃主席套餐

  1. package com.hello;
  2. public class hello{public static void main(String[] args)
  3. {int today= 7;
  4. switch(today){
  5. case 1:
  6. case 3:
  7. case 5:
  8. System.out.println("吃包子");break;
  9. case 2:
  10. case 4:
  11. case 6:
  12. System.out.println("吃油条");break;
  13. case 7:
  14. System.out.println("主席套餐");
  15. }
  16. }
  17. }

Java 循环语句之 while

执行过程:

<1>、 判断 while 后面的条件是否成立 (true / false)

<2>、 当条件成立时,执行循环内的操作代码 ,然后重复执行 <1>、<2>, 直到循环条件不成立为止

特点:先判断,后执行
如:

实现功能:顺序输出 1 ~ 5 这 5 个数字。

实现思路:使用一个变量 i 代表 1 - 5 之间的数字,值从 1 开始,每次循环时输出 i 的值,并且对 i 的值加 1 ,只要 i 小于等于数字 5 就执行该循环

  1. package com.hello;
  2. public class hello{public static void main(String[] args)
  3. { int i = 1; //初始化i并赋值
  4. while (i<=5) //当i小于等于5时运行花括号内语句
  5. {
  6. System.out.println(i);
  7. i++; //i使用后自增1
  8. }
  9. }
  10. }

Java 循环语句之 do...while

执行过程:

<1>、 先执行一遍循环操作,然后判断循环条件是否成立

<2>、 如果条件成立,继续执行 <1> 、<2>,直到循环条件不成立为止

特点: 先执行,后判断

由此可见,do...while 语句保证循环至少被执行一次!

实现功能:计算 50 以内(包括 50 )的偶数之和

实现思路:首先定义一个变量 sum ,用来保存所有偶数的和,然后定义一个变量 num 代表 1--50 之间的偶数,值从 2 开始,每次循环执行时将 num 的值累加保存在变量 sum 中,并且将 num 值加 2 (偶数嘛,你懂得哈~~),只要 num 的值在 1--50 之内就重复执行该循环

  1. package com.hello;
  2. public class hello{public static void main(String[] args)
  3. {
  4. int sum = 0;
  5. int num = 2;
  6. do {
  7. sum+=num;
  8. num = num + 2; // 每执行一次将数值加 2,以进行下次循环条件判断
  9. } while (num<=50); // 满足数值在 1-50 之间时重复执行循环
  10. System.out.println("50 以内的偶数之和为:" + sum);
  11. }
  12. }

试交换第八第九行语句,如何更改使得结果为650

for循环

实现功能:计算 1 到 100 之间不能被 3 整除的数之和

  1. package com.hello;
  2. public class hello
  3. {
  4. public static void main(String[] args)
  5. {
  6. int sum = 0;
  7. for (int i = 1;i<=100;i++)
  8. {
  9. if (i % 3 != 0)
  10. sum = sum + i;
  11. }
  12. System.out.println(sum);
  13. }
  14. }

注意作用域。

Java 循环跳转语句之 break

在 Java 中,我们可以使用 break 语句退出指定的循环,直接执行循环后面的代码。

例如,使用循环输出 1--10 的数值,其中,如果数值大于 2 ,并且为 3 的倍数则停止输出。

实现代码:

实现功能:循环将 1 到 10 之间的整数相加,如果累加值大于 20,则跳出循环,并输出当前的累加值。

实现思路:定义一个变量 sum 保存累加值,定义一个变量 i 保存 1 至 10 之间的整数,在循环中进行累加求和,同时判断累加值是否大于 20 ,当大于 20 时输出当前的累加值并退出循环。

  1. package com.hello;
  2. public class hello{public static void main(String[] args)
  3. {
  4. int sum = 0;
  5. for (int i = 1; i <= 10; i++)
  6. {
  7. sum = sum + i;
  8. if (sum>=20)
  9. break;
  10. }
  11. System.out.print(" 当前的累加值为:"+ sum);
  12. }
  13. }

同样要注意作用域。搞清楚break会退出哪个循环。

Java 循环跳转语句之 continue

continue 的作用是跳过循环体中剩余的语句执行下一次循环。

例如,打印 1--10 之间所有的偶数,使用 continue 语句实现代码为:

实现功能:求 1 到 10 之间的所有偶数的和。

实现思路:定义一个变量 sum 保存累加值,定义一个变量 i 保存 1 到 10 之间的整数,循环遍历并进行判断,如果 i 不能被 2 整除,则结束本次循环,继续执行下一次循环,否则进行累加求和。

  1. package com.hello;
  2. public class hello
  3. {public static void main(String[] args)
  4. {
  5. int sum = 0;
  6. for (int i = 1; i <= 10; i++)
  7. {
  8. if (i%2!=0) {
  9. continue;}
  10. sum = sum + i;
  11. }
  12. System.out.print("1 到 10 之间的所有偶数的和为:" + sum);
  13. }
  14. }

这里需要注意break和continue的区别。

break是退出整个循环,执行循环后的语句;而continue则是退出当前循环,继续进行下一次循环,并未退出整个循环。

Java 循环语句之多重循环

循环体中包含循环语句的结构称为多重循环。三种循环语句可以自身嵌套,也可以相互嵌套,最常见的就是二重循环。在二重循环中,外层循环每执行一次,内层循环要执行一圈

打印长方形

执行流程:当 i = 1 时,外层循环条件成立,进入内层循环,开始打印第一行内容。此时, j 从 1 开始,循环 8 次,内层循环结束后换行,实现第一行 8 个 * 的输出。接下来返回外层循环 i 变为 2 ,准备打印下一行,依此类推,直到完成长方形的打印。

实现功能:使用 * 打印直角三角形

实现思路:上面的图形中,第 1 行有一个 * 号,第 2 行有两个 * 号,第 3 行有三个 * 号,所以可以使用二重循环来实现。其中,外层循环控制行数,内层循环控制每行的 * 号数。同时,我们发现一个规律,当打印每行信息时,内层循环变量的最大值和外层循环变量的值相等。

  1. package com.hello;
  2. public class hello
  3. {public static void main(String[] args)
  4. {
  5. for (int i = 1;i<=3;i++) {
  6. for(int j=1;j<=i;j++)
  7. {
  8. System.out.print("*");
  9. }
  10. System.out.println();
  11. }
  12. }
  13. }

为什么有的是print。有的是println呢?
print和println的区别在哪里?
如果想都改成print或者是println该怎么做呢?

判断一个数(小于 10 位)的位数。
输入 999,则输出 “它是个 3 位的数!”

  1. package com.hello;
  2. public class hello
  3. {public static void main(String[] args)
  4. {
  5. int count;
  6. int num=9999;
  7. for(count=1;(num/=10)>0;count++);
  8. System.out.println("它是个"+count+"位的数!");
  9. }
  10. }

试试还有没有其他的方式;

为指定成绩加分,直到分数大于等于 60 为止,输出加分前和加分后的成绩,并统计加分的次数

  1. package com.hello;
  2. public class hello
  3. {public static void main(String[] args)
  4. {
  5. int score = 53;
  6. int count = 0;
  7. System.out.println("加分前成绩:"+score);
  8. for(score=53;score<60;count++)
  9. score++;
  10. System.out.println("加分后成绩:"+score);
  11. System.out.println("共加了:"+count+"次");
  12. }
  13. }

## 获得用户输入

  1. package com.hello;
  2. import java.util.Scanner;
  3. public class hello
  4. {public static void main(String[] args)
  5. {
  6. Scanner input=new Scanner(System.in);
  7. System.out.println("请输入考试成绩信息:");
  8. int score = input.nextInt();
  9. int count = 0;
  10. System.out.println("加分前成绩:"+score);
  11. for(;score<60;count++)
  12. score++;
  13. System.out.println("加分后成绩:"+score);
  14. System.out.println("共加了:"+count+"次");
  15. }
  16. }
  1. package com.hello;
  2. import java.util.Scanner; //调用输入函数
  3. public class hello
  4. {public static void main(String[] args)
  5. {
  6. Scanner input=new Scanner(System.in);
  7. int classNum=3;
  8. int stuNum=4;
  9. double sum=0 ;
  10. double avge=0;
  11. for(int i=1;i<=classNum;i++)
  12. { sum=0;
  13. System.out.println("***请输入第"+i+"个班级的成绩***");
  14. for(int j=1;j<=stuNum;j++)
  15. {
  16. System.out.print("请输入第"+j+"个学生的成绩:");
  17. int score=input.nextInt();
  18. sum=sum+score;
  19. }
  20. avge=sum/stuNum;
  21. System.out.println("第"+i+"个班级的平均分:"+avge);
  22. System.out.println("第"+i+"个班级的总分:"+sum);
  23. }
  24. }
  25. }

#什么是数组

数组可以理解为是一个巨大的 “盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学生的成绩

## 如何使用 Java 中的数组

1、 声明数组

语法: 数据类型 [ ] 数组名;

或者 数据类型 数组名 [ ];

其中,数组名可以是任意合法的变量名,如:

2、 分配空间

简单地说,就是指定数组中最多可存储多少个元素

语法: 数组名 = new 数据类型 [数组长度];

其中,数组长度就是数组中能存放元素的个数,如:

话说,我们也可以将上面的两个步骤合并,在声明数组的同时为它分配空间,如:

4、 处理数组中数据

我们可以对赋值后的数组进行操作和处理,如获取并输出数组中元素的值

  1. package com.hello;
  2. public class hello
  3. {public static void main(String[] args)
  4. {
  5. String[] subjects = new String[5];
  6. // 分别为数组中的元素赋值
  7. subjects[0] = "Oracle";
  8. subjects[1] = "PHP";
  9. subjects[2] = "Linux";
  10. subjects[3] = "Java";
  11. subjects[4] = "HTML";
  12. System.out.println("数组中第 4 个科目为:" +subjects[3]);
  13. }
  14. }

或者

  1. package com.hello;
  2. public class hello{public static void main(String[] args)
  3. {
  4. String[] subjects = {"Oracle","PHP","Linux","Java","HTML"};
  5. System.out.println("数组中第 4 个科目为:" +subjects[3]);
  6. }
  7. }

## 使用循环操作 Java 中的数组


其中, 数组名. length 用于获取数组的长度

需要注意的 “小毛病”:

1、 数组下标从 0 开始。因此 scores3 ,表示数组中的第 4 个元素,而并非第 3 个元素

2、 数组下标的范围是 0 至 数组长度 - 1 ,如果越界访问,就会报错。

  1. String[] hobbys = {"sports","game","movie"};
  2. System.out.println("循环输出数组中元素的值:");
  3. for(int i=1;i<=hobbys.length;i++)
  4. System.out.println(hobbys[i-1]);
  5. }

任务要求:

1、 定义一个整型数组,并赋初值 61, 23, 4, 74, 13, 148, 20

2、 定义变量分别保存最大值、最小值、累加值和平均值,并假设数组中的第一个元素既为最大值又为最小值

3、 使用 for 循环遍历数组中的元素,分别与假定的最大值和最小值比较。如果比假定的最大值要大,则替换当前的最大值;如果比假定的最小值要小,则替换当前的最小值

4、 循环执行过程中对数组中的元素进行累加求和

5、 循环结束根据累加值计算平均值,并打印输出相关内容

  1. package com.hello;
  2. public class hello
  3. {public static void main(String[] args)
  4. {
  5. int[] nums = new int[] {61, 23, 4, 74, 13, 148, 20};
  6. int max = nums[0]; // 假定最大值为数组中的第一个元素
  7. int min = nums[0]; // 假定最小值为数组中的第一个元素
  8. double sum = 0;// 累加值
  9. double avg = 0;// 平均值
  10. for (int i = 0; i < nums.length; i++)
  11. {
  12. if (nums[i]>max)
  13. max=nums[i]; // 如果当前值大于 max,则替换 max 的值
  14. else if (nums[i]<min)
  15. min=nums[i]; // 如果当前值小于 min,则替换 min 的值
  16. sum+=nums[i]; // 累计求和
  17. }
  18. avg=sum/7; //求平均值
  19. System.out.println("数组中的最大值:" + max);
  20. System.out.println("数组中的最小值:" + min);
  21. System.out.println("数组中的平均值:" + avg);
  22. }
  23. }

## 使用 Arrays 类操作 Java 中的数组

Arrays 类是 Java 中提供的一个工具类,在 java.util 包中。该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序、搜索等(关于类和方法的相关内容在后面的章节中会详细讲解滴~~)。

Arrays 中常用的方法:

1、 排序

语法: Arrays.sort(数组名);

可以使用 sort() 方法实现对数组的排序,只要将数组名放在 sort() 方法的括号中,就可以完成对该数组的排序(按升序排列),如:

2、 将数组转换为字符串

语法: Arrays.toString(数组名);

可以使用 toString( ) 方法将一个数组转换成字符串,该方法按顺序把多个数组元素连接在一起,多个元素之间使用逗号和空格隔开,如:

## 使用 foreach 操作数组

foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组、集合时, foreach 更简单便捷。从英文字面意思理解 foreach 也就是 “for 每一个” 的意思,那么到底怎么使用 foreach 语句呢?

语法:

留个思考问题给大家:如果想在 foreach 语句中获取数组元素的下标,该如何做呢??

在编辑器中定义了一个整型数组 scores ,保存学生成绩信息,通过 Arrays 类的 sort 方法对成绩数组进行排序,然后使用 foreach 遍历输出数组中的元素。

  1. package com.hello;
  2. import java.util.Arrays;
  3. public class hello
  4. {public static void main(String[] args)
  5. {
  6. int i=0;
  7. int[] scores = { 89, 72, 64, 58, 93};
  8. Arrays.sort (scores);
  9. for ( int score:scores)
  10. {
  11. System.out.println(score);
  12. System.out.println("其下标为:"+i);
  13. i++;
  14. }
  15. }
  16. }

## Java 中的二维数组

所谓二维数组,可以简单的理解为是一种 “特殊” 的一维数组,它的每个数组空间中保存的是一个一维数组。

那么如何使用二维数组呢,步骤如下:


2、 赋值

二维数组的赋值,和一维数组类似,可以通过下标来逐个赋值,注意索引从 0 开始

3、 处理数组

二维数组的访问和输出同一维数组一样,只是多了一个下标而已。在循环输出时,需要里面再内嵌一个循环,即使用二重循环来输出二维数组中的每一个元素。如:
![][38]

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注