java入门
进制
数值型的表现形式
整型:
进制: 满几进一
**
Java中常用4种进制的表示方法**
- 二进制(binary):0,1,满二进一。以0b或0B开头。
- 十进制(decimal):0-9,满10进1.
- 八进制(octal):0-7,满8进1.以数字0开头表示。
- 十六进制(hex):0-9和A-F,满16进1。以0x或0X开头表示。注意:A-F不区分大小写。比如 0X12AB=0x12ab。
其他进制转为十进制:
从右往左,每一位的数值*进制数^次方从0开始,每次+1 ,最后求和就是对应的十进制数据
十进制转为其他进制:
使用当前 的十进制数据,不停的除以要转为的进制数,得到结果为0就不除了,得到最终的余数,从下往上看结果
浮点型:
0.5->.5 0可以省略
科学计数法 : e|E-> 10
0.12E3 ->0.12*10^3
0.12E-3 ->0.12/10^3
数据类型转换
数据类型转换:
boolean 类型不参与类型转换
自动类型提升
大范围数据类型 变量 = 小范围类型的数据;
强制类型转换
小范围数据类型 变量 = (小范围数据类型)大范围数据数据;
注意:
对应类型的数据赋值给对应类型的变量
强制转型发生在赋值之前
如果多种数据类型的数据参与运算,最终的结果为参与运算中的最大数据类型
如果运算后最大的类型小于int类型,会自动提升成为int
byte-short-int-long-float-double
如果为byte,short,char类型赋值的时候,只要在其范围内的常量就能成功赋值
运算符
运算符分类:
算数运算符
赋值运算符
比较运算符|关系
逻辑运算符
条件运算符
位运算符
操作数: 运算符左右两边 的数据称为操作数
表达式: 运算符连接操作数整体称之为表达式
语句 : ;代表一个语句的结尾
单目运算符|一元 : 操作数只有一个 + -负号 ++ --
双目运算符|二元 : 操作数只有两个 + - * /
三目运算符|三元 : 条件运算符
算数运算符:
+ - * / %求余数 ++ --
+ :
1)正号->可以省略
2)加法运算
3)字符串连接符: 当+左右两边存在字符串的数据,当前的+作为字符串的连接符存在,会把左右两边的数据连接成为一整个字符串
- :
1)负号
2)减法运算
% 取模|模以|求余数:
当第一个操作数<第二个操作数,结果就为第一个操作数
代码展示
public class Class004_Operator{
public static void main(String[] args){
int i = 2+3;
int j = 10;
System.out.println("i="+i); //"i=5"
System.out.println("j = " + j); //"j = 10"
System.out.println(5/3);
System.out.println(5%3);
System.out.println(3%5); //3
}
}
java中的自增与自减
++ – (重要)
++ : 自增 a++ -->a=a+1;
– : 自减 a-- -->a=a-1;
只影响自己,不影响其他结果
++放在操作数的前面或者后面,都是自身+1
--放在操作数的前面或者后面,都是自身-1
影响自己,也影响其他结果 (输出,赋值,运算)
++或者--放在操作数的前面,先自身+1|-1,然后再去参与运算
++或者--放在操作数的后面,先再去参与运算,然后自身+1|-1
注意: 一个变量的值一旦改变不可恢复
代码展示
public class Class005_Operator{
public static void main(String[] args){
int a = 3;
//影响自己
a++; //a=a+1;
++a; //a=a+1;
a--;
System.out.println(a); //4
//影响别人
//考虑: a的值是1还是10000有没有影响其他的结果?->有,影响别人->没有->只影响自己
//有->不仅仅修改了a变量的值,还影响了打印语句的结果
System.out.println(a++); //1)先输出a变量的值 2)a++
System.out.println(a); // 5
int b = a--;
System.out.println(a); //4
System.out.println(b); //5
int c = ++a -1;
System.out.println(a); //5
System.out.println(c); //4
c = a++ + ++a + a++ + ++a;
System.out.println(a); //9
System.out.println(c); //28
int k=20;
int j=8;
int totle = k++ + j-- + --j + ++k + k++ + j++ + k-- + --k + j++;
System.out.println("k="+k+",j="+j+",totle="+totle); //k=,j=,totle=
}
}
java中的赋值运算符
赋值运算符
基础赋值运算符
=
在java中=是自由向左运算的符号
优先级是最低的
扩展赋值运算符(算数运算符+基本赋值运算符)
+= : a+=3; a=a+3;
-=
*=
/=
%= : a%=3; a=a%3;
推荐使用扩展赋值运算符
优点:
1.提高执行效率 (编译期间,编译器会自动编译成扩展赋值运算符)
2.自动做强制类型转换
关系运算符与比较运算符
< >= <= == !=
> < >= <=
byte,short,int,long,char,float,double
== !=
任意类型的数据
关系运算符运算的结果是一个boolean类型的结果
逻辑运算符
逻辑运算符:
两边的操作数都为boolean类型->值|表达式
& 与 : 两变都为true结果才为true,一个为false就是false
| 或 : 两边都为false才是false,一个为true就是true
! 非 : 取反 !true->false !false->true
^ 异或
相同为false,不同为true
短路: 左边的操作数已经能够决定最终的结果,右边的操作数不在执行
&&
||
推荐使用短路&& 与 短路||
条件运算符
条件运算符
条件表达式 ? 值1 : 值2 ;
条件表达式 : 值为boolean类型的表达式
执行流程:
1.计算条件表达式,得到一个boolean结果
2.如果条件表达式的结果为true,最终的结果为值1
2.如果条件表达式的结果为false,最终的结果为值2
条件运算符最终肯定能够得到一个执行结果,不是值1就是值2
位运算符
位运算符: -->了解
对二进制的操作数进行某种规则的运算
以下三个运算符两边的操作数为boolean 作为逻辑运算符,两边的操作数为整数,作为位运算符
&
先把两个操作数转为二进制,同一位置的两个数,一个为0就是0,两个都为1才是1,结果转为十进制
|
先把两个操作数转为二进制,同一位置的两个数,一个为1就是1,两个都为0才是0
^
先把两个操作数转为二进制,同一位置的两个数,相同为0,不同为1
位移运算符:
>> 右移
左边的操作数转为二进制,向右移动右边操作数个位数,移动的位数舍弃,结果转为十进制
<< 左移
左边的操作数转为二进制,向左移动右边操作数个位数,空位补0,结果转为十进制
规律:
>> 右移相当于/2 a>>b -> a/2^b
<< 左移相当于/2 a<<b -> a*2^b
位运算符效率高,对二进制的数据做运算
运算符的优先级(顺口溜)
单目算数位关系,逻辑三目后赋值
数据类型
基本数据类型:
数据类型 变量名 = 数据值;
int i = 1;
引用数据类型:
1)导包
指定要使用的引用数据类型的位置
import 包名.类名;
位置: 类的上面
2)创建引用数据类型的引用
引用数据类型 变量名|引用 = new 引用数据类型();
3)使用功能
引用.功能名字();
Scanner : 接收用户键盘输入的内容
1)导包: import java.util.Scanner;
2)创建一个Scanner类型的引用
Scanner sc = new Scanner(System.in);
3)使用功能
sc.nextInt() 接收用户键盘输入的int类型的数据
sc.nextByte() 接收用户键盘输入的byte类型的数据
sc.nextShort() 接收用户键盘输入的short类型的数据
sc.nextLong() 接收用户键盘输入的long类型的数据
sc.nextDouble() 接收用户键盘输入的double类型的数据
sc.nextFloat() 接收用户键盘输入的float类型的数据
sc.next() 接收用户收入的字符串类型的数据
从有效字符开始接收(非空格),遇到空格就停止接收,知道遇到enter功能结束
以上这些系列的next功能,都是从有效字符开始接收
sc.nextLine() 接收用户输入的一整行的数据,知道遇到enter结束
当nextLine功能的上面存在系列的next功能时候,注意处理之前的系列的next遗留的enter问题
代码展示
port java.util.Scanner;
public class Class012_Scanner{
public static void main(String[] args){
//1)导包:
//2)创建一个Scanner类型的引用
Scanner sc = new Scanner(System.in);
//3)使用功能
int i = sc.nextInt();
System.out.println("用户输入的内容为 = "+i);
/*
byte b = sc.nextByte();
System.out.println("用户输入的内容为 = "+b);
System.out.println("请输入用户名:");
String name = sc.next();
System.out.println("用户输入的内容为 = "+name);
System.out.println(name.length());
*/
//处理遗留的enter问题
sc.nextLine();
String str = sc.nextLine();
System.out.println(str);
}
}
Random 声明随机数
1.导包 import java.util.Random;
2.创建类型的引用 Random ran = new Random();
3.使用功能
ran.nextInt() 生成一个int类型范围内的随机数
ran.nextInt(整数n) 生成一个 [0,n) 之间的随机整数
ran.nextDouble() 生成一个 double 类型的随机小数->[0.0,1.0)
总结公式:
[min,max) 随机整数 ran.nextInt(max-min)+min
ran.nextInt(max)->[0,max)
ran.nextInt(max)+min ->[0,max) + min -> [min,max+min)
ran.nextInt(max-min)+min ->[0,max-min) + min -> [min,max)
[min,max] 随机整数 ran.nextInt(max-min+1)+min