JAVA基础学习(二)
day2
1、变量
变量:内存中装载数据的小盒子,你只能用它来存数据和取数据。
2、计算机存储单元
计算机存储设备的最小信息单元叫“位(bit)”,又称之为“比特位”,通常用小写字母b表示。
计算机最小的存储单元叫“字节(byte)”,通常用大写字母B表示,字节是由连续的8个位组成。
常用存储单位间的转换:
1B(字节) = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
3、常量与类型
注:java中默认的整数类型是int类型,long型需在数据后加L,如,100L,12345678901L
java中默认的浮点类型是double类型,float型须在数据后加F,如,4.1F
4、定义变量(创建变量)
定义变量的语法格式:数据类型 变量名 = 数据名;(定义变量的三要素)
注:同一个变量重复赋值,以最后一次赋值为准
String是引用类型,不属于基本类型,String类中有final关键字,不可被继承。
5、变量使用的注意事项
- 变量定义时可以不赋值,可使用时再赋值,但不赋值不可使用。(赋值=初始化变量)
- 变量有一定的作用范围:定义的一对大括号之内
- 变量不可重复定义
6、数据类型转换
数据类型转换原则:范围小的数据类型值可以直接转换为范围大的数据类型值
范围大的数据类型值不可以直接转换为范围小的数据类型值
数据类型范围从小到大:byte -> short -> int -> long -> float -> double
- 自动类型转换:表示小范围的数据类型转换成范围大的数据类型,这种方式称为自动类型转换
注:boolean类型不参与类型转换
自动类型转换格式:范围大的数据类型 变量 = 范围小的数据类型值,如,double d = 1000;
public class main{ public static void main(String[] args){ double d = 1000;//自动类型转换 System.out.println(d); int i = 100; double d1 = i;//自动类型转换 System.out.println(d1); byte b = 10; int i1 = b;//自动类型转换 System.out.println(i1); } }
运行结果:
- 数据类型的强制转换:数据类型取值范围大的,转换成取值范围小的
数据类型的强制转换格式:被转后的数据类型 变量名 = (被转换后的数据类型)要被转的数据
1 public class main{ 2 public static void main(String[] args){ 3 double d = 3.14; 4 System.out.println(d); 5 6 int i = (int)d;//强制类型转换 7 System.out.println(i); 8 } 9 }
程序运行结果:
1 public class main{ 2 public static void main(String[] args){ 3 byte b =(byte)200;//强制转换,损失精度,丢数据 4 System.out.println(b); 5 } 6 }
程序运行结果:
注:强制类型转换没有特殊要求最好不要做,会损失精度,丢数据。
7、运算符
- 算术运算符:
+(正号、加、连接字符串)、-(负号、减)、*(乘)、/(除)、%(取模)、++(自增1)、--(自减1)
注:“+”遇到字符串变成连接符号,任何类型只要和字符串+,所有的数据都变成了字符串
注:++的置后性
1 public class main{ 2 public static void main(String[] args){ 3 4 //+从左往右结合 5 System.out.println("加法"); 6 System.out.println("1+2="+1+2); 7 System.out.println("1+2="+1+2+3); 8 System.out.println("1+2="+(1+2)); 9 10 //除法 / 11 System.out.println("除法"); 12 int i = 100; 13 int j = 11; 14 System.out.println(i/j);//整数运算只能得到整数 15 double m = 3; 16 double n = 2; 17 double a = m/n; 18 System.out.println(m/n); 19 System.out.println(a); 20 21 //自增 22 //符号写前写后,在变量自己独立存在时,没有区别 23 System.out.println("符号写前写后,在变量自己独立存在时,没有区别"); 24 i++; 25 ++j; 26 System.out.println(i); 27 System.out.println(j); 28 //符号写前写后,在参与其他运算时,有区别 29 System.out.println("符号写前写后,在参与其他运算时,有区别"); 30 int k =6; 31 int b = k++;//b=k=6后,k=k+1=7 32 int c = ++k;//k=k+1=8,c=k=8 33 System.out.println(b); 34 System.out.println(c); 35 System.out.println(k); 36 37 System.out.println("++的置后性"); 38 int f = 1; 39 int g ; 40 g = f++ + 10; 41 System.out.println(f); 42 System.out.println(g); 43 44 } 45 }
程序运行结果:
- 赋值运算符:
=(赋值)、+=(加后赋值)、-=(减后赋值)、*=(乘后赋值)、/=(除后赋值)、%=(取模后赋值)
注:+=的自动强制转换,其余类似
1 public class main{ 2 public static void main(String[] args){ 3 byte b = 1; 4 b = (byte)(b + 1);//强制转换 5 System.out.println(b); 6 7 byte b1 = 1; 8 b1 +=1;//等同于(byte)(b1 + 1),+=会自动强制转换 9 System.out.println(b1); 10 11 } 12 }
程序运行结果:
- 比较运算符(关系运算符):
==(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)结果都是布尔类型,true或false
- 逻辑运算符:
&(与)、|(或)、!(非)、^(异或)、&&(短路与)、||(短路或) 对两个boolean类型数据之间进行计算,结果也是布尔类型
&:一边是false,运算结果就是false
|:一边是true,运算结果就是true
!:取反:!false结果为true,!true结果为false
^:两边相同为false,相同为true
&&:一边是false,一边不运行
||:一边是true,一边不运行
注:&&和||的意义是提高运行效率
1 public class main{ 2 public static void main(String[] args){ 3 int i = 1; 4 int j = 2; 5 System.out.println(3>4 & ++i>1); 6 System.out.println(i); 7 int m = 1; 8 int n = 2; 9 System.out.println(3>4 && ++m>1);//++m>1被短路 10 System.out.println(m); 11 12 } 13 }
程序运行结果:
- 三元运算符
公式:布尔表达式 ? 结果1:结果2;
布尔表达式结果是true,三元运算符的结果是,结果1
布尔表达式结果是false,三元运算符的结果是,结果2
1 public class main{ 2 public static void main(String[] args){ 3 4 System.out.println(1>2?11:21); 5 String s = 1<=2?"是":"否"; 6 System.out.println(s); 7 } 8 }
程序运行结果:
day3
1、引用数据类型
- 引用数据类型的使用:
数据类型 变量名 = new 数据类型();
每种引用类型都有其功能,我们可以通过“.”调用该类型实例的功能
变量名.方法名();
- Scanner类
使用步骤:
- 导入包;import java.util.Scanner
- 公式,创建出Scanner类型变量
- 变量,使用Scanner类中的功能,完成键盘输入
1 import java.util.Scanner; 2 public class main{ 3 public static void main(String[] args){ 4 //创建出Scanner类型变量 5 Scanner sc = new Scanner(System.in); 6 //接收键盘输入 7 int i = sc.nextInt();//只能接收整数 8 System.out.println(i); 9 String s = sc.next();//接收字符串 10 System.out.println(s); 11 12 } 13 }
程序运行结果:
- Random类
- 导入包;import java.util.Random
- 公式,创建出Random类型变量
- 变量,使用Randomr类中的功能,产生随机数
注:随机数又叫伪随机数,是虚拟机根据人写好的一个算法生成出来的,是可以被某些人算出的
1 import java.util.Random; 2 public class main{ 3 public static void main(String[] args){ 4 //创建出Randomr类型变量 5 Random r = new Random(); 6 //调用Random的功能,产生一个随机数,结果是整数型(int) 7 //可以规定随机数的范围 0 - 指定的整数,如,nextInt(100),随机数范围是0 - 99 8 int i = r.nextInt(100); 9 System.out.println(i); 10 //产生1-100的随机数 11 int j = r.nextInt(100)+1; 12 System.out.println(j); 13 14 //产生浮点的随机数,无范围指定,范围固定为0.0 - 1.0(可能为0.0,不可能为1.0) 15 double d = r.nextDouble(); 16 System.out.println(d); 17 18 19 20 } 21 }
程序运行结果:
2、选择结构
- if语句:
if(条件){
if语句的执行体
}
注:如果条件成立,执行if语句的执行体
如果条件不成立,什么也不做,程序继续向下执行
- if…else语句:
if(判断条件){
if的执行体
}else{
else的执行体
}
当if中的条件为true时,执行if的执行体
false时,执行else的执行体
- if…else if……else语句:
if(判断条件1){
if的执行体1
}else if(判断条件2){
if的执行体2
}else{
}
注:else if 可以有很多个,适用于多条件语句
如果有一个i判断条件成立,则执行其后的if执行体,且其后的所有判断条件及其执行体不再执行。
- 选择结构if语句与三元运算转化:
1 public class main{ 2 public static void main(String[] args){ 3 int i = 1; 4 int j = 2; 5 if(i>j){ 6 System.out.println(i); 7 }else{ 8 System.out.println(j); 9 } 10 //将if…else转换为三元运算 11 int k = i>j ? i:j; 12 System.out.println(k); 13 } 14 }
程序运行结果:
注:三元运算必须有结果,if…else结构可以都不执行
三元运算的格式要简单的多,if…else可以有更多条件判断
3、循环语句
- while循环
while(条件){
循环体
}
当条件为真时,执行循环体,执行完循环体后再次判断while中的条件,如果条件仍然为真,继续执行循环体,直到条件为假时,退出循环。
- for循环
for(初始化变量;条件;增量){
循环体
}
初始化变量:定义变量,用来控制循环的次数
条件:当条件为真时,执行循环体,条件为假时,结束循环
增量:变量自增情况
- do…while
do{
循环体
}while(条件);
注:无论条件是否成立,都会先执行一次循环体
- 死循环
1、while(true){
}
2、for(;;){ }或for(;true;){ }
- 嵌套循环
注:总的循环次数=内循环次数*外循环次数
1 public class main{ 2 public static void main(String[] args){ 3 for(int i = 1;i<9;i++){ 4 for(int j = 1;j<=i;j++){ 5 System.out.print("*"); 6 } 7 System.out.println(); 8 } 9 } 10 }
程序执行结果:
- break关键字:终止当前循环
1 public class main{ 2 public static void main(String[] args){ 3 for(int i = 1;i<9;i++){ 4 for(int j = 1;j<=i;j++){ 5 if(i == 4){ 6 System.out.println("这里是第三行"); 7 break; 8 } 9 System.out.print("*"); 10 11 } 12 System.out.println(); 13 } 14 } 15 }
程序执行结果
注:break的特殊用法(可用于结束外循环):
1 public class main{ 2 public static void main(String[] args){ 3 a:for(int i = 1;i<9;i++){ 4 for(int j = 1;j<=i;j++){ 5 if(i == 4){ 6 System.out.println("这里是第三行"); 7 break a; 8 } 9 System.out.print("*"); 10 11 } 12 System.out.println(); 13 } 14 } 15 }
程序运行结果:
- continue关键字:终止本次循环,开始下一次循环
1 public class main{ 2 public static void main(String[] args){ 3 for(int i = 1;i<9;i++){ 4 for(int j = 1;j<=i;j++){ 5 if(j == 4){ 6 System.out.print("j=4");//将第四个*改为“j=4” 7 continue; 8 } 9 System.out.print("*"); 10 11 } 12 System.out.println(); 13 } 14 } 15 }
程序运行结果:
简单应用:猜数字小游戏
1 import java.util.Random; 2 import java.util.Scanner; 3 public class main{ 4 public static void main(String[] args){ 5 Random r = new Random(); 6 int n = r.nextInt(101); 7 System.out.println("****猜数字游戏****"); 8 System.out.println("请输入一个0-100的整数"); 9 while(true){ 10 Scanner sc = new Scanner(System.in); 11 int m = sc.nextInt(); 12 if(m<n){ 13 System.out.println("对不起,您猜小了"); 14 }else if(m>n){ 15 System.out.println("对不起,您猜大了"); 16 }else{ 17 System.out.println("恭喜您,猜对了!"); 18 break; 19 } 20 } 21 } 22 }
程序运行结果: