注:Java官方提供了针对不同平台的JVM软件,这些JVM遵循着相同的标准,只要是标准的.class文件,就可以在不
同的JVM上运行,而且运行的效果相同,这样,就实现了所谓“-次编程到处使用”
名词解释
System.out.println(2+2);//4
System.out.println(2+'2');//52 2加上'2'的码
System.out.println('2'+'2');//100 '2'的码50,加上'2'的码50
int b = '2';
System.out.println(b);//50
byte b1 = 5;//整数直接量可以直接赋值给byte ,short , char
byte b2 = 6;
//byte b3 = b1 + b2;//编译错误,byte ,char,short 型数据参与运算,先一律转换为int 类型
byte b4 = (byte)(b1 + b2);
System.out.println(b4);
1)算数运算符:
int x =3;
x =x++;//被使用
System.out.println(x);//3
int y = 3;
y =++y;//被使用
System.out.println(y);//4
2)赋值运算符:
//常见面试题
short s = 5;
s +=10;// 相当于s = (short)(s+10)
//s = s+10;//编译错误 ,需要强转 s = (short)(s+10)
4)字符串连接符:
5)逻辑运算符:
/*
* 1)关于短路问题: && 和 || 是短语与和或 &和|是不短路与和或------一般不用
* &&和|| 一般我们都用短路的
* //相亲 条件不满足就短路
*/
int a = 5,b =10,c=5;
boolean m= a>b && c++>2;
System.out.println(m);//false
System.out.println(c);//5,发生短路了
/*
* 2)闰年的 判断
* 闰年的判断公式
* 1)能被4整除 并且 不能被100整除 :year%4==0&&year%100!=0
* 或者 ||
* 2)能被400整除 :year%400==0
* //year%4==0&&year%100!=0||year%400==0
*/
int year = 2004;//年份
boolean flag = (year%4==0 && year%100!=0 || year%400==0);
//flag 为true 说明是闰年 为false说明是平年
String str = flag? year+"闰年" : year+"平年";
System.out.println(str);
Scanner scan = new Scanner(System.in);
System.out.println("请输入年份:");
int year1 = scan.nextInt();
if(year1%4==0 && year1%100!=0 || year1%400==0){
System.out.println(year1+"是闰年");
}
System.out.println(year1+"是平年");
//交换 两个数:
int a = 8,b =5;//换成a=5,b=8
int t =a;//t=8
a=b;//a=5
b=t;//b=t=8
System.out.println(a);
System.out.println(b);
/*
* 交换两个数: 追尾并绕圈
* int t =a; a=b; b=t;
* int t = b ; b =a; a =t;
*/
int a=45;
int b=23;
a=a+b;//68
b=a-b;//45
a=a-b;//23
System.out.println(a+","+b);
/*
* if : 1条路
* 1) 语法:
* if(boolean){
* 语句块
* }
* 2)执行过程:
* 判断boolean 的值:
* 若为true:则执行语句块
* 若为false:则不执行语句块
*/
/*
* if...else 两条路
if(boolean){
* 语句块1
* }else{
* 语句块2
* }
* 2)执行过程:
* 判断boolean 的值:
* 若为true:则执行语句块1
* 若为false:则执行语句块 2
* 3)结论 :块1和块2必走其中之一
*/
/*
* if... else if 结构: 多条路
* 1)语法:
* if(boolean1){
* 语句块1
* }else if(boolean2){
* 语句块2
* }else if(boolean3){
* 语句块3
* }else{
* 语句块4
* }
* 2)执行过程:
* 判断boolean
* 判断boolean-1,若为true则执行语句块1(结束),若为false则
* 再判断boolean-2,若为true则执行语句块2(结束),若为false则
* 再判断boolean-3,若为true则执行语句块3(结束),若为false则执行语句块4(结束
* 3)结论 :语句块:1/2/3/4,必走其中之一
*/
小练习:判断成绩
package day04;
import java.util.Scanner;
//命令解析程序
public class CammandBySwitch {
public static void main(String[] args) {
Scanner scan =new Scanner(System.in);
System.out.println("请输入您的成绩:");
double score = scan.nextDouble();
if(score<0 || score>100){
System.out.println("成绩不合法");
}else if(score>=90){
System.out.println("A-优秀");
}else if(score>=80){
System.out.println("B-良好");
}else if(score>=60){
System.out.println("C-中等");
}else {
System.out.println("D-不及格");
}
System.out.println("over");
}
}
}
编译之后,反编译得代码如下:
String str = "123";
switch(str)
{
case "123":
System.out.println(str);
break;
case "456":
System.out.println(str);
break;
default:
System.out.println(str);
}
我们可以看到,其实传进switch的是字符串的hashCode值,而case 后面的字符串常量在编译之后也变成了它的hashCode。而在case后面的模块代码中多了一段比较case后面的字符串常量与传进来的字符串是否相等的判断代码。
String str = "123";
String str1;
switch ((str1 = str).hashCode())
{
case 48690:
if (str1.equals("123")) {
break;
}
break;
case 51669:
if (!str1.equals("456"))
{
break label80;
System.out.println(str);
break label87;
}
else
{
System.out.println(str);
}
break;
}
练习:判断月份天数:
package day04;
//判断月份天数
public class Exer {
public static void main(String[] args) {
//根据年份和月份来计算天数
int year =2020;//年份
int month = 4;//月份
int days = 0;//天数
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if(year%4==0&&year%100!=0||year%400==0){
days=29;
}else{
days=29;
}
break;
}
System.out.println("days="+days);
}
}
while
/ *
* while结构:
* 1)语法:
* while(boolean){
* 语句块---------反复执行代码
* }
* 2)执行过程:
* 判断boolean的值,若为true则执行语句块,
* 再判断boolean的值,若为true则执行语句块;
* 再判断boolean的值,若为true则执行语句块;
* 如此反复,直到boolean的值为false则while循环结束
*/
do...while
/*
* do...while结构:
* 1)语法:
* do{
* 语句块
* }while(boolean);
*
* 2)执行过程:
*先执行语句块,再判断boolean的值,若为true则
*再执行语句块,再判断boolean的值,若为true则;
*再执行语句块,再判断boolean的值,若为true则再执行语句块;
*如此反复,直到boolean的值为false则do...while循环结束
*/
for
/*
* for 结构:
* 1)
* //
* for(要素1;要素2;要素3){
* 语句块/循环体------------反复执行代码 4
* }
* 2)执行过程:12342342342342 必然以2结束 false 循环结束
*/
/*
* for 结构的特殊性写法-------了解
*/
/*
for(int i=0,j=5;i<5;i+=2,j-=2){
}
/*
*i=0, j=5
*i=2 ,j=3
*i=4, j=1
*i=6, j=-1
*/
/*
for(;;){//死循环 没有条件的循环
System.out.println("行动是成功的阶梯");
}
*/
/*
for(int times=0;times<10;){
System.out.println("行动是成功的阶梯");
times++;
}
*/
小案例:100以内累加和
//小案例
//累加和:1+2+34+....+99+100
int sum =0;//存和
for(int i =0;i<=100;i++){
sum =sum+i;//在本身基础之上累加
}
System.out.println("sum="+sum);
案例 :for循环随机出运算题
package day06;
import java.util.Scanner;
//随机 加法题
public class Addition {
public static void main(String[] args) {
Scanner scan =new Scanner(System.in);
int score=0;//得分 (1)35+98=
for(int i=1;i<=10;i++){//10次
//1. 出题 2.答题 3.判断
/*
* Math.random();----0.0———0.99999999999.....
* Math.random()*1000+1;----0.0———999.99999999.....
* Math.random()*100+1;----0.0———99.999999999.....
*/
int a =(int)(Math.random()*100+1);//加数a(0-99之间随机数
int b =(int)(Math.random()*100+1);//加数b(0-99之间随机数
int result =a+b;//存正确结果
System.out.println("("+i+")"+a+"+"+b+"=?");//1.出题
System.out.println("算吧!");
int answer=scan.nextInt();//2)答题
if(answer == result){//判题
System.out.println("答对了");
score+=10;//score = score+10 答对一题加十分
}else{
System.out.println("答错了");
}
}
System.out.println("得分为:"+score);
}
}
嵌套循环
案例://99乘法表
package day06;
//九九乘法表
public class MultiTable {//多表格
public static void main(String[] args) {
for(int num=1;num<=9;num++){
for(int i=1;i<=num;i++){
System.out.print(i+"*"+num+"="+i*num+"\t");
}
System.out.println();//换行
/*
* 执行过程:
* num=3
* i=1 1*3=3
* i=2 2*3=6
* i=3 3*3=9
* i=4 false
* num=2
* i=1 true i*2=2
* i=2 true i*2=4
* i=3 false
* 换行
* num 1;
* i=1 true 1*1=1;
* i=2 false
* 换行
*
*/
}
}
}
break continue的区别
int m=0;
for(int i=0;i<=100;i++){
if(i%10==3){
/*m=0;
* i=1 m=0+1
* i=2 m=0+1+2=3
* i=3 %10=3 true break 跳出循环
*
*/
break;//break 当取模余三 跳出循环 不再循环
}
m=m+i;
}
System.out.println("sum="+m);//3
int num=0;
for(int i =1;i<=100;i++){
if(i%10==3){
continue;//跳过循环体中剩余语句 而直接进入下一次循环
//应用率不高
}
num =num+i;
}
System.out.println("num="+num);//4570
循环结构的选择标准:
数组
package day06;
//数组的演示
public class ArrayDemo {
public static void main(String[] args) {
//数组也是一种数据类型 引用类型
//是相同数据类型元素的集合
//1.数组的定义
// 数据类型 [] 数组变量 = new 数据类型[leagth/长度];
/* int [] arr= new int[leangth/长度]; int类型数组 byte ,short ,char
//int, long默认值为0
* double [] arr= new double[length/长度]; double , float默认值为0.0
* boolean [] arr= new double[length/长度]; boolean 默认值为false
*/
int [] arr1 = new int[10];
//2.数组的初始化
int [] arr2 = new int[3];//0,0,0-声明整型数组 ,包含三个元素 每个元素是int 类型 占
//12个字节
int [] arr3 ={1,4,7};//1,4,7
int [] arr4 = new int[]{1,4,7};//1,4,7
int [] arr5;
//arr = {1,4,7}//编译错误,此方式只能声明同时初始化
arr5 = new int[]{1,4,7};
//3.数组的访问
//数组的使用: 使用的是数组中的元素
/*1.通过(数组名.length)可以获取数组的长度。数组的长度也就数元素的个数
*2.通过下标/索引来访问数组中的元素
* 下标从 0 开始,最大到(数组的长度 减1)
*/
int [] arr =new int[3];
System.out.println(arr.length);
arr[0] = 100;//给arr中第一个元素赋值给100
arr[1] = 200;//给arr中第二个元素赋值给200
arr[2] = 300;//给arr中第三个元素赋值给300
//arr[3] = 400;//运行时 会发生数组下标越界异常
System.out.println(arr[arr.length-1]);//输出arr中最后一个元素
//4.数组的遍历: 将所有的数组元素/数据全部走一遍
//只要用到数组长度就用 数组变量.length36
int [] num = new int[10];
for(int i=0;i
找最大值
package day06;
//数组元素的最大值
public class MaxOfArray {//最大 数组
public static void main(String[] args) {
int []arr=new int[10];
for(int i =0;imax){
max = arr[i];//则修改max 的值为最大的
}
}
System.out.println("max="+max);
}
}
小案例:数组元素的最大值 并放在数组的最后一个元素的 下一个位置
package day07;
import java.util.Arrays;
//数组元素的最大值 并放在数组的最后一个元素的 下一个位置
public class MaxOfArray {//最大 数组 扩容
public static void main(String[] args) {
int []arr=new int[10];
for(int i =1;imax){
max = arr[i];//则修改max 的值为最大的
}
}
System.out.println("max="+max);
//数组扩容 import java.util.Arrays
arr =Arrays.copyOf(arr, arr.length+1);//数组扩容
arr[arr.length-1]=max;//奖最大值max复制到最后一个元素上
for(int i=0;i
//8)数组的排序:
int [] arr= {2,34,42,54,667,76,8676,66};
Arrays.sort(arr);//升序排列
/*
for(int i =0;i=0;i--){//倒着输入 降序
System.out.println(arr[i]);
}
1修饰词 2返回值类型 3方法名( 4参数列表){
5 方法体 }
package day07;
//方法的演示
public class MethodDemo {
public static void main(String[] args){
int c=2,d=5;
int e=plus(c,d);//----实参(实际参数) 此处传的是c和d里面的那个数
System.out.println(e);
int b =plus(5,6);//------实参(实际参数)
System.out.println(b);
double a= getNum();//getNum()的值就是return红藕的那个值
System.out.println(a);//2.22
sayHello1("张三",25);
sayHello1("lisi",52);*/
//方法的嵌套调用 (方法中调方法)
a();//111, 222, 333
System.out.println(444);//444 2431
}
public static void a(){
System.out.println(111);
b();
System.out.println(333);
}
public static void b(){
System.out.println(222);
}
//有参无返回值 return 的使用
public static void sayHello1(String name, int age){
if(age>=40){//在某种特定条件下,提前结束方法
return;//结束方法的执行
}
System.out.println("大家好,我叫"+name+",今年"+age+"岁了。");
}
//有参有返回值
public static int plus(int num1,int num2){//----------形参(形式参数)
int num= num1+num2;
return num;//返回的是num里面的数 (1)应用率最高
//return num1 +num2;//返回num1+num2的和 (2)
}
//无参有返回值
public static double getNum(){
//return;//返回 编译错误 ,return后必须跟一个值
//return"abx";//返回 编译错误 ,return 后值的类型必须以返回值类型匹配
return 2.22;//1)结束方法的执行 2)返回一个结果给调用方
}
}
package day07;
//练习
public class Exer {
public static void main(String[] args) {
/*
* 需求:
* 1)封装一个方法 generateArray
* 2)生成指定长度的int 数组
* 3)数组中的元素为0到指定范围的随机数
* 4)并将数组返回 返回值
*/
int[] arr = generateArray(3,20);
for(int i=0;i