Java0531-node
目录
1 Java基础
1.1 输出
System.out.println();
public class Test1{
public static void main(String[] args){
System.out.println("hello world!!!");
System.out.println();//空行
//System.out.print();错误,不能这样既不输出也不换行
}
}
转义字符
- "——>\ "
- \——>\ \(一个\)
- Tab——>\t(水平制表符,一个tab的距离)
- 换行——>\n(换行)
System.out.println("你好\\");//输出:你好\
System.out.println("你好\"");//输出:你好"
System.out.println("你好\t你好");//输出:你好 你好
System.out.println("你好\n你好");//输出:你好
// 你好
1.2 代码注释
解释代码,方便程序员解读代码
不影响程序执行效率
分类:
- 单行注释://,用在行末或代码前
- 多行注释:/* */
- 文档注释:/** */,DOS命令:javadoc -d doc Test.java;生产doc文件夹,找里面的index.html
2 变量
2.1 变量
变量:内存中的一块空间,空间中存储的值可以发生变化
变量三要素:
- 变量值:空间里存储的数据
- 变量类型:存储的数据的类型,决定分配空间的大小
- 变量名:存储空间的别名,快速找到或取出空间里的数据
2.2 数据类型
数据类型
- 基本数据类型
- 数值型:
整数
int:4个字节,32位,范围[(-231)~(231-1)] = [-2,147,483,648~2,147,483,647]
byte:1个字节
short:2个字节
long:8个字节
浮点数
float:4个字节
double:8个字节
- 字符型
char:存储单个字符,2个字节,用单引号引出(例:‘eye’)
字符0——>48;A——>65;a——>97
- 布尔类型
boolean:TRUE:真;FALSE:假- 引用数据类型
- 字符串类型
String:存储0~多个字符,用双引号引出(例:“Hello World!”)
2.3 数据类型转换
数据类型转换
- 隐式转换:自动转换
条件:数据类型要兼容(byte、char、short、int、long、float、double)且要小转大- 强制类型转换:(目标数据类型) 变量;
条件:数据类型要兼容(byte、char、short、int、long、float、double)且要大转小,
复合赋值运算符,会自动进行强制类型转换
(short s2 =1;s2 = s2 + 1;报错)
(short s2 = 1;s2 += 1;不报错)
2.4 变量名
变量名
命名规范:
- 只能使用$,字母,数字,_,不能以数字开头
- 不能使用关键字,如:public,class,static,void,String等
- 建议:命名要见名知意
- 驼峰法(Camel命名法):例:StudentAge
- 区分大小写
2.5 变量的使用
变量的使用
- 申请空间:数据类型 变量名; 例:int money;
- 存储数据:变量名 = 数据; 例:money = 10;
可以合成一步:数据类型 变量名 = 数据; 例:int money = 10;- 使用变量:例:Syetem.out.println(money);
例
public class Mp3Num{
public static void main(String[] args){
String name = "漫步者";
double price;
price = 299.9;
char color = '白';
int inventory;
inventory = 100;
boolean IsStarter = false;
System.out.println("品牌:"+name);
System.out.println("价格:"+price);
System.out.println("颜色:"+color);
System.out.println("库存:"+inventory);
System.out.println("是否首发:"+IsStarter);
}
}
结果
D:\java\code\0531>java Mp3Num
品牌:漫步者
价格:299.9
颜色:白
库存:100
是否首发:false
3 常量
3.1 概念
常量:内存里的一块空间,且数据不能改变
3.2 使用方法
final 数据类型 变量名 = 值;
命名规则:全部用大写,单词之间用下划线做分隔
字面常量:例:1、“a”、false等
默认数据类型
- 整数的默认类型为int,超过范围的赋值给long,需要在数值末尾加l/L
- 小数的默认类型为double,给float类型赋值,需要在数值末尾加f/F
使用场景:
- 固定不变的量,建议使用常量。例:PI(π)、WEEK_DAY
- 特殊的含义
4 运算符
4.1 赋值运算符
变量名 = 表达式;:从右往左赋值
从键盘输入数据
- 导包 import java.util.Scanner;
- 初始化scanner Scanner name = new Scanner(System.in);
- 接受一个int类型的数据 int c = name.nextInt();
接受一个double类型的数据 double d = name.nextDouble();
接收一个String类型的数据 String c = name.next();
//导包
import java.util.Scanner;
public class StuInfor{
public static void main(String[] args){
//初始化scanner
Scanner input = new Scanner(System.in);
//int型
int a = input.nextInt();
System.out.println("你输入了一个:"+a);
//double型
double b = input.nextDouble();
System.out.println("你输入了一个:"+b);
//String型
String c = input.next();
System.out.println("你输入了一个:"+c);
}
}
复合赋值运算符
+=、-=、*=、/=、%=
4.2 算术运算符
+ - * / %
3/2
拆分整数
public class SplitNum{
public static void main(String[] args){
//两位数
int num = 25;
int decade = num/10;
int unit = num%10;
System.out.println("十位数字为:"+decade);
System.out.println("个位数字为:"+unit);
//三位数
int num1 = 259;
int hundred1 = num1/100;
//int decade1 = (num1/10)%10;
int decade1 = (num1%100)/10;
int unit1 = num1%10;
System.out.println("百位数字为:"+hundred1);
System.out.println("十位数字为:"+decade1);
System.out.println("个位数字为:"+unit1);
//四位数
int num2 = 1259;
int thousand2 = num2/1000;
int hundred2 = (num2%1000)/100;
int decade2 = ((num2%1000)%100)/10;
int unit2 = num2%10;
System.out.println("千位数字为:"+thousand2);
System.out.println("百位数字为:"+hundred2);
System.out.println("十位数字为:"+decade2);
System.out.println("个位数字为:"+unit2);
}
}
其他方法
单目运算符
- ++:自增1(a++、++a)(++在后,先用再加;++在前,先加再用)
- –:自减1(a–、–a)
public class Test1{ public static void main(String[] args){ int a = 6; System.out.println(a++);//6 System.out.println(++a);//8 int a1 = 6; System.out.println(++a1);//7 int a2 = 6; a2 = a2++; System.out.println(a2);//6 int a3 = 6; a2 = ++a2; System.out.println(a2);//7 int b = 4; int c = b++; System.out.println(b);//5 System.out.println(c);//4 int b1 = 4; int c1 = ++b1; System.out.println(b1);//5 System.out.println(c1);//5 } }
4.3 关系运算符
> 、< 、>=、 <=、==、!=
关系表达式的结果是boolean类型,TRUE/FALSE
import java.util.Scanner;
public class Test2{
public static void main(String[] args){
int num1 = 23;
int num2 = 23;
boolean flag = num1==num2;
System.out.println(flag);//true
//double 有有效范围,不建议使用double判断相等
double d1 = 1.0;
double d2 = 1.0000000000000000000123;
System.out.println(d1==d2);//true
//String类型的数值比较,==比较的是字符串的地址,因为有常量池的存在,此处返回true
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2);//true
//此处==返回的是false,故String类型的比较,不要用==
Scanner input = new Scanner(System.in);
String str3 = input.next();
System.out.println(str1==str3);//false
//String类型的比较,建议使用equals()方法
boolean flag1 = str1.equals(str3);
System.out.println(flag1);//true
//char类型是按照数值来存的
char c ='a';
char d = 'A';
System.out.println(c<d);
}
}
4.4 逻辑运算符
链接多个条件/多个关系表达式
- &&:逻辑与 条件1 && 条件2; 两个条件同时成立才为true(同真则真,有假则假)
- ||:逻辑或 条件1 || 条件2; 两个条件有一个成立就为true(有真则真,同假则假)
特点:支持短路(优先级高的建议放在条件一,会简化判断流程,提高速度)
- !:取反
public class Test3{
public static void main(String[] args){
//短路
int num1 = 15;
int num2 = 1;
//&&:条件一不成立
boolean flag3 = (num1<10)&&(num2++<3);
System.out.println(flag3);//false
System.out.println(num2);//1 条件一不成立,跳过第二个条件
//&&:条件一成立
boolean flag4 = (num1>10)&&(num2++<3);
System.out.println(flag4);//false
System.out.println(num2);//2 条件一成立,执行第二个条件
//||:条件一成立
boolean flag5 = (num1>10)&&(num2++<3);
System.out.println(flag5);//true
System.out.println(num2);//1 条件一成立,跳过第二个条件
//||:条件一不成立
boolean flag6 = (num1<10)&&(num2++<3);
System.out.println(flag6);//false
System.out.println(num2);//2 条件一不成立,执行第二个条件
//!
boolean flag7 = !flag6;
System.out.println(flag7);//true
}
}
4.5 位运算符
- 低位补0,高位溢出
<<:左移(0101<<1——>1010)——>(5<<1—>10)int a = 5; int b = 5<<1;//相当于乘2 System.out.println(b);//10
- 高位补0,低位溢出
>>:右移(0101>>1——>0010)——>(5>>1—>2)int a = 5; int b = 5>>1;//相当于除2 System.out.println(b);//2
- 同1则1,遇0则0
&:按位与(位运算)int a = 5; int b = 13; int c = a & b;//00000101(5)与00001101(13)按位与——>00000101(5) System.out.println(c);//5
可以进行逻辑运算,但与&&相比,&不支持短路
int x = 5; int y = 13; boolean flag = (x<6)&(y>12); System.out.println(flag);//true boolean flag1 = (x>6)&(y++>12);//位运算结果为数值,逻辑运算结果为true或false System.out.println(flag1);//false System.out.println(y);//14(不支持短路,条件1不成立时,会执行条件2)
可以判断奇偶数:与1&运算,为1是奇,为0是偶
int x = 5; boolean flag = (x & 1)==0; int y = x & 1; //00000101(5)与00000001(1)按位与——>00000001(奇)如果为00000100(4)与00000001(1)按位与——>00000000(偶) System.out.println(flag);//false System.out.println(y);//1
- 有1则1,同0则0
|:按位或
可以进行逻辑运算,但与||相比,|不支持短路
取一个数最近的偶数:与1|运算,将最末位置1,然后-1,即可
00000101(5)与00000001(1)按位或——>00000101(5)-1=4
- 不同为1,相同为0
^:异或
对同一个数字异或2次,可以获得原数字(5^13^13——>5)或(5^13^5——>13)
00000101(5)与00001101(13)按位异或——>00001000(8)加密
00001000(8)与00001101(13)按位异或——>00000101(5)解密
4.6 优先级
先进行运算,在比较,然后连接,最后赋值
()优先级最高