JAVA基础第三部
一、常见进制与转换
进制 | 组成 | 范围 | 开头(标识) |
---|---|---|---|
2进制 | 1、0 | 满2进1 | 0b或者0B |
8进制 | 0~7 | 满8进1 | 0 |
10进制 | 0~9 | 满10进1 | |
16进制 | 0~9 + a~f(10 ~15) | 满16进1 | 0x或者0X |
其他进制转10进制:从右往左第一个数开始*当前进制数的0次方+第二个数 * 当前进制数的1次方 以此类推 求和
十进制转其他进制:这个数一直除以进制数,看余数;
浮点型:
整数为o的时候可以省略:
System.out.println(.1234); // 0.1234
科学计数法表示:
e=10;
System.out.println(1.23e2); //132
System.out.println(1.23e-2); //0.0123
二、常见的转义字符
转义字符是一种特殊的字符常量
转义字符从 \ 开始 + 要转义的字符
\b 退格 、 \n 换行ln 、 \r 光标回到行首
\t 制表符:制表符占8个空格,会自动补齐
System.out.println("AAABBBCCC\tAAAAA");//AAAAAAAACCC AAAAA
1234567812345678
三、运算符
种类:
1)单目运算符/一元运算符:操作数只有一个的运算符 +(正号) -(负号) ++ –
2)双目运算符/二元运算符:操作数有俩个的运算符 + - * /
3)三目运算符/三元运算符:条件表达式 ?true:false
1、算数运算符
+ - * /
+:
1)正号
2)加法运算
3)字符串的连接符:当+ 左右两边如果有字符串出现,就作为字符串的连接符使用
% 取余:
第一个操作数如果小于第二个操作室,结果就为第一个操作数
System.out.println(3%5);//3
2、赋值运算符
一、基本赋值运算符: =
java中唯一一个自右向左运算的符号
二、扩展赋值运算符:+= -= *= /= %=
a+=b-> a=a+b;
a*=b-> a=a*b;
特点:提高执行效率、自动做强制类型转换 唯一缺点就是不直观
3、比较运算符
也称关系运算符
< <= > >= ==(等于) !=(不等于)
最终结果为boolean
类型
4、条件运算符
也称三目运算:
格式 条件表达式 ? 值1 : 值2;
1)最终结果也是boolean
类型
2)如果为true,最终的结果取值1
3)如果为false,最终的结果取值2
5、位运算符
所有操作数先转为二进制的形式参与运算,再把结果转为十进制的形式
& :同一位置的俩个数,俩个都是1才为1 否则就是0
| :同一位置的俩个数,俩个都是0才为0 否则就是1
^ :相同为0 不同为1
位移运算符:
左移 <<
第一个操作数*2的第二个操作数次方 *2
9<<2 //36
右移>>
第一个操作数/2的第二个操作数次方 /2
8<<2 //2
6、逻辑运算符
操作谁都为布尔类型的表达式(false/true)
一、&与:俩个都为true才是true,否则false
二、|或:俩个都为false才是false,否则true
三、! 非:取反 !flase=true !true=flase
四、^异同:相同为false。不同为true
&&
、||
相当于&
|
的升级版跟符合编程的规范 提高执行效率叫做短路与 短路或
当第一个操作数就已经能决定最终的结果了,第二个操作数将不再执行
四、Scanner输入类
导包:使用Scanner类时需要引入java中util包中的Scanner类
import java.util.Scanner;
创建: 应用的数据类型 变量名 =new 引用数据类型();
使用:变量.功能名字();
//创建
Scanner s1=new Scanner();
//使用
int a=s1.next();//接收字符串 不接受空格
int a=s1.nextLine();//接收一行中所有内容 包括空格
int a=s1.nextInt();//接收整数型
int a=s1.nextDouble();//接收Double类型数据
int a=s1.nextByte()//接收Byte类型数据
int a=s1.nextShort()//接收Short类型数据
五、Random随机数
导包:使用Random类时需要引入java中util包中的Random类
import java.util.Random;
创建:
Random r=new Random;
//使用
r.nextInt();//产生一个int范围内的随机整数
r.nextInt(n);// 产生0~n随机整数 [0,n)
r.nextInt(b-a+1)+a;//产生一个 a~b之间的随机数 固定公式
r.nextDouble() //产生[0,1)之间的随机小数
六、iF语句
IF语句属于选择结构,根据选择决定执行的内容
if语句可以做区间判断
IF语句的3种用法:
//1、单选择|单分支
if(条件表达式){
语句体;
}//条件表达式必须布尔类型。true才会执行语句体,false不执行
//2、双选择|多分支
if(条件表达式){
语句体1;
}else{
语句体2;
} //true才会执行语句体1,false执行语句体2
//3、多选择|多分支
if(条件表达式1){
语句体1;//条件表达式1为true执行语句体1
}else if(条件表达式2){
语句体2;//条件表达式2为true执行语句体2
}else if(条件表达式3){
语句体3;//条件表达式3为true执行语句体3
}
....
else{
//以上条件都不满足执行的内容
}
无论是多选还是单选,双选,只要语句体只有1句,前后的{}可以省略
七、Switch语句
switch 只能做定值判断
表达式使用的数据类型:byte,short,int,char,枚举(1.5),字符串(1.7)
case:表达式的值和case的值相同时 执行该case中的语句体;
break: 结束这个switch语句,如果没有break会发生case穿透
default: 以上case都不满足条件,执行default中的语句体(和else作用一样)
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
....
default:
语句体n;
break;
}
八、循环语句For、While、do…Whlie
1、for循环
格式:
for(条件初始化;条件判断;条件变化){
重复执行的语句;
}
例如:循环10次:
// i 是决定执行语句体的次数 i变量只在循环体中使用
for(int i=0;i<=9;i++){
重复执行的语句; //当循环体只有一句的时候,前后的{}可以省略
}
流程:
1.条件初始化:声明一个变量,并且第一次赋值–>这个变量就是条件i
2.条件判断,结果如果为false,直接结束for循环,如果结果为true,满足条件执行{}中的语句体
3.条件变化: i自身的值的变化
从第二次开始重复执行第2,3步
2、While循环
先判断再执行
格式://whil循环属于条件循环
条件从初始化;
while(条件判断){
语句体;
条件变化;
}
for:次数循环
while:条件循环
例如:打印1~100的数字
int i=0;
while(i<=100){ //当i不满足条件判断就不会进入循环
System.out.println(i);
i++;
}
3、Do…While循环
先执行后判断
格式:
条件初始化;
do{
循环体语句;
条件变化;
}while(判断条件);
例如:打印1~100的数字
int i=1;
do{
System.out.println(i);
i++;
}while(i<=100)
特点:无论满足不满足判断条件都会执行一次
4、break|continue
一、break
:结束本次循环 用于循环体中和swtich
二、continue
:结束本次循环 直接进入下一次循环 循环体中使用
5、循环嵌套
只需要记住:外循环执行一次,内循环执行一轮
内循环中使用break
只能结束内循环
内循环中使用break
结束外循环的方式:
a: for(条件初始化;条件判断;条件变化){ //在外循环for前面定义一个标识符+:
代码
b: for(条件初始化;条件判断;条件变化){
代码
break a; //使用break时 标明外循环的标识符
}
代码
}
九、方法
1、定义
具有特定功能的代码块成为方法
特点:
1、方法不调用的时候说不会执行的
2、类中方法外,方法不能嵌套
一、有返回值类型
参数:
实际参数(实参):调用方法时()中的参数
形式参数(形参):定义方法时()中的参数
形参和实参要一 一 对应包括 位置、顺序、类型等
//有返回值类型格式:
//方法名:标识符符合标识符的命名规则和规范,方法的调用要根据方法名
修饰符 返回值类型 方法名([参数列表]){
方法体语句;
return 返回值;//当方法执行结束返回的值,返回值必须类型必须和 返回值相同
}
//有返回值类型的调用: 在主方法中调用
public static void main(String[] args){
//直接调用
方法名(实参);
double d = 方法名(实参);
//赋值调用
System.out.println(d); //打印
//输出调用
System.out.println(方法名(实参));
}
返回值类型: 基本数据类型和应用数据类型
参数列表:
1、参数列表 []这个括号表示可有可无,也可以有多个参数
2、方法定义的时候,未知的不确定的值定义在参数列表上
3、数据类型 参数名1,数据类型 参数2, 调用方法传入参数必须和参数列表中类型一致
4、参数相当于局部变量的声明
return;
1、return除了可以结束循环也可以结束方法
2、return在有返回值类型中必须带有并且带返回值
二、没有返回值类型
格式:
修饰符 void 方法名([参数列表]){ //void表示没有返回值类型的方法
方法体语句;
[return];
}
例子:
//比较两个数据是否相同
//返回值:String 参数: int x,int y
public static String equals(int x,int y){
if(x==y){
return "相等";
}else{
return "不相等";
}
}
调用:
public static void main(String[] args){
System.out.println(equals(7,7));//打印 相等
}
2、注意事项
一、不可达语句:(报错)
1.return的后面出现的语句,叫做不可达语句
2.break后
3.死循环后的代码
4.continue
5.while(false)–>
二、兼容类型:
1.实参的数据类型<=型参的数据类型
2.接收返回值的类型>=方法的返回值类型>=return后数据的类型
3、方法的重载
定义:在一个类中 多个方法名相同但是参数列表不同(个数不同、类型不同、顺序不同)
唯一用来区分不同方法的是: 方法名+参数列表;
注意:
方法的重载和修饰符的无关
方法的重载和有无反回值无关
方法的重载和返回值类型无关
方法的重载和参数的名字无关
当一个同一个方法重复使用,但仅仅参数列表不同那么就可以使用方法的重载
例如:
//求2个整数的和
public static int getSum(int a,int b){
System.out.println("int int");
System.out.println(a+b);
return 1+2;
}
private static String getSum(int a,int b){
System.out.println("int int");
System.out.println(a+b);
return "";
}
//求三个整数的和
public static void getSum(int a,int b,int c){
System.out.println("int int int");
System.out.println(a+b+c);
}
//求两个小数的和
public static void getSum(double d1,double d2){
System.out.println("double double");
System.out.println(d1+d2);
}
//求三个小数的和
public static void getSum(double d1,double d2,double d3){
System.out.println("double double double");
System.out.println(d1+d2+d3);
}
//调用getSum方法时会根据你实参的类型自动匹配对应的方法
4、方法的递归
递归就是方法内部自己调用自己的方法
缺点: 运行效率低、容易出现内存溢出 。不推荐使用,了解即可。
public static void main(String[] args){
System.out.println(test(5));
}
//阶乘 //根据传入的实参不同计算不同的阶乘
public static int test(int i){
if(i==1){
return 1;
}
return i*test(i-1);
}
}