一、Java数据类型-String
String属于引用数据类型,是Java类库中提供的一个类,用类来当做字符串变量类型
声明方式,例:
String str="我是谁";
与基本类型的运算规则:任意八种基本类型的数据与String类型数据进行”+“运算时,结果仍为字符串,String不能转换为其他基本类型。
二、基本数据类型之间的转换
8种基本数据类型除了布尔型以外,其他7种之间可以进行相互转换
默认转换
转换规则:将取值范围小的类型可以自动转换成取值范围大的类型
char ---》
byte ---》 int ---》 long ---》 float ---》 double
short ---》
注:4字节的float类型表数范围大于8字节的long,浮点数在存储时结构与整数计算方式不同。
强制转换
容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造 成精 度降低或溢出;使用时要格外注意,例:
int a = 258;
byte b = (byte)a;
此时b的值为2,原因:int占4个字节,00000000|00000000|00000001|00000010
byte占1个字节,则前面三个字节数据溢出,只剩下了00000010
在多种数据进行混合运算时,会自动将所有数据转换为表数范围最大的类型再进行计算。
三、运算符
1.算数运算
运算符 运算 案例 结果
+ 正号 +3 3
- 负号 b=4;-b -4
+ 加 5+5 10
- 减 514-114 400
* 乘 3*4 12
/ 除 5/3 1
% 取模 5%3 2
++ 自增:在前先运算后取值,在后先取值后运算 a=2;b=++a;c=a++; a=3 b=3 c=2
-- 自减:在前先运算后取值,在后先取值后运算 a=2;b=--a;c=a--; a=1 b=1 c=2
+ 字符串相加 "He"+"llo" "Hello"
2.比较运算符
运算符 运算 案例 结果
== 相等于 4==3 false
!= 不等于 4!=3 true
< 小于 4<3 false
> 大于 4>3 true
<= 不大于 4<=3 false
>= 不小于 4>=3 true
instanceof 检查是否是类的对象 "hello" instanceof String true
比较运算符的结果都为boolean型,也就是要么true,要么是false。
3.逻辑运算符
&——逻辑与 |——逻辑或 !——逻辑非
&&——短路与 ||——短路或 ^——逻辑异或
a b a&b a|b !a a^b a&&b a||b
true true true true false false true true
true false false true false true false true
false true false true true true false true
false false false false true false false false
”&“和”&&“的区别:
单个&时,左边无论真假,右边表达式都进行运算;
两个&时,若左边为真,右边参与运算;当左边为假,右边不参加运算;
”|“和”||“同理。
4.赋值运算符
符号:=
扩展赋值运算符:+=、-=、*=、/=、%=
例:s += 2——>s = s+2,其余同理
经典案例:
short a = 3;
a = a+2;//此行会报错
a +=2;
原因:2默认为int型,而扩展赋值运算符自带隐式转换。
5.条件运算符
语法:
(条件表达式)?表达式1:表达式2;
条件表达式为true,运算后的结果是表达式1;条件表达式为false时,运算后的结果是表达式2。
注:如果运算后的结果赋给新的变量,要求表达式1和表达式2为同种或兼容的类型。
6.位运算符
日常开发中位运算使用相对较少,但是巧妙的使用位运算可以大量减少运行开 销, 优化算法。
<< 空位补0,被移除的最高位丢弃,空缺位补0
>> 被移位的二进制最高位是0,右移后,空缺位补0; 最高位是1,空缺位补1
>>> 被移位二进制最高位无论是0或者是1,空缺位都用0补
& 二进制位进行&运算,只有1&1时结果是1,否则是0
| 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1
^ 相同二进制位进行 ^ 运算,结果是0,例:1^1=0 , 0^0=0
不相同二进制位 ^ 运算,结果是1,例:1^0=1
~ 正数取反,各二进制码按补码各位取反
负数取反,各二进制码按补码各位取反
三、控制台输入
Java提供Scanner类来实现从控制台向程序输入信息功能。
具体步骤:
创建Scanner类型对象,例:
Scanner sacnner=new Scanner(System.in);
此时编译软件会自动导入Scanner的包
import java.util.Scanner;
调用相关功能,来获取输入的信息
import java.util.Scanner;
public class scanf {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String ctrl = scanner.next();
int str2 = scanner.nextInt();
//此处省略其他
System.out.println(ctrl);
System.out.println(ctr2);
}
}
四、控制语句
1.条件语句
1)if语法:
基本语法:
if(判断条件1){
//条件成立时运行语句
}
else if(判断条件2){
//条件成立时运行语句
}
else{
//条件成立时运行语句
}
举例:
import java.util.Scanner;
public class pan_duan {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入需要判断的月份");
int month=scanner.nextInt();
if(month==3||month==4||month==5)
System.out.println(month+"是春季");
else if(month==6||month==7||month==8)
System.out.println(month+"是夏季");
else if(month==9||month==10||month==11)
System.out.println(month+"是秋季");
else
System.out.println(month+"是冬季");
}
}
当if语句块只有一行语句时,可以省略{},就如本例,但不推荐这样使用
(2)switch语法
基本语法:
switch(判断表达式){
case 值1:
//条件成立时运行语句
case 值2:
//条件成立时运行语句
……
case 值n:
//条件成立时运行语句
default:
//条件都不成立时运行语句
}
例:
import java.util.Scanner;
public class biancheng5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scan.nextInt();
System.out.print("请输入月份:");
int month = scan.nextInt();
System.out.print("请输入日期:");
int day = scan.nextInt();
int days = 0;
switch (month){
case 12:days += 30;
case 11:days += 31;
case 10:days += 30;
case 9:days += 31;
case 8:days += 31;
case 7:days += 30;
case 6:days += 31;
case 5:days += 30;
case 4:days += 31;
case 3:
if((year%4==0&&year%100!=0)||year%400==0){
days += 29;
}
else{
days += 28;
}
case 2:days += 31;
case 1:days += day;
}
System.out.println(year+"年"+month+"月"+day+"天是今年的第"+days+"天");
}
case 值相当于if的判断条件中的”==“,需要注意的是,case语句并没有{},但case语句具有”穿透性“,在一般情况下,需要用break取消其穿透性。并且凡是switch可以实现的功能 if else都可以实现,反之则不一定。switch和if else都能实现的功能建议使用switch,效率更高
下面是用if{}else语句实现相同功能的代码
import java.util.Scanner;
/**
* 编程一个程序,计算今天是今年的第几天.
* 例如: 控制台分别输入年月日
* 2023
* 10
* 30
*/
public class years_day {
static Scanner scanner=new Scanner(System.in);
public static void main(String[] args) {
System.out.println("请输入年份");
int year=scanner.nextInt();
System.out.println("请输入月份");
int month=scanner.nextInt();
System.out.println("请输入日期");
int days=scanner.nextInt();
boolean flag=run_nian(year);
int yearsDay=days(flag,month,days);
System.out.println(year+"年"+month+"月"+days+"日"+"是"+year+"年的第"+yearsDay+"天");
}
public static boolean run_nian(int year){
if(year%4==0&&year%100!=0||year%400==0)
{
return true;
}
else
return false;
}
public static int days(boolean flag,int month,int days){
int february;
int day=0;
if(flag){
february=29;
}
else{
february=28;
}
for(int i=1;i<month;i++){
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
day+=31;
}
else if (i==2){
day+=february;
}
else{
day+=30;
}
}
day+=days;
return day;
}
}
2.循环语句
(1)while循环
基本语法:
while(条件表达式){
//条件成立时运行语句
}
//继续执行后续代码
while
循环在每次循环开始前,首先判断条件是否成立。如果计算结果为true
,就把循环体内的语句执行一遍,如果计算结果为false
,那就直接跳到while
循环的末尾,继续往下执行。
(2)do-while循环
基本语法:
do{
//条件成立时运行语句
}while(条件表达式);
//继续执行后续代码
(3)for循环
基本语法:
for(计数器初值;条件表达式;计算器操作){
//条件成立时运行语句
}
//继续执行后续代码
for
循环的功能非常强大,它使用计数器实现循环。for
循环会先初始化计数器,然后,在每次循环前检测循环条件,在每次循环后更新计数器。
3.break和continue
在循环过程中,可以使用break
语句跳出当前循环。在Java中,可以通过标签跳出多层循环,例:
public class manyxh {
public static void main(String[] args) {
outloop:for (int i = 0;i < 5;i++){
for (int j = 0;j <3;j++){
System.out.println("@");
if(i == 2){
break outloop;
}
}
System.out.println("#");
}
}
}
break
会跳出当前循环,也就是整个循环都不会执行了。而continue
则是提前结束本次循环,直接继续执行下次循环。