一、Java数据类型
1.基本数据类型
整数类型byte ,short ,int ,long
字符型char
浮点类型float ,double
布尔型boolean
2.引用数据类型
数据类型String
运算规则
1.任意八种基本数据类型的数据与String类型只能进行连接"+"运算,且结果一定也是String类型
2.String类型不能转为其他的基本类型
注意
boolean类型数据只允许取值true或false
二、基本数据类型转换
在Java程序中,不同的基本数据类型(这里只有7种,不包含boolean类型)变量的值经常需要进行相互转换。
1.默认转换
转换规则:将容量小的类型转换为容量大的类型,可以直接转换
byte char short-->int-->long-->float-->double
这里4个字节的float的容量大于8个字节的long的容量,原因是float的小数和整数在底层的二进制存储计算方式不同
2、强制转换
转换规则:将容量大的类型转换为容量小的类型,需要添加强制转换符,例如:
int b = 10;
byte a = (byte)b;
当进行强制转换时,会出现的问题:
1.精确度变小了
float x = 20.25f;
int y = (int)x;
System.out.println(y);
2.溢出了
int m = 10;
byte n = (byte)m;
System.out.println(n);
字节大小容量不足
注意
有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那种数据类型,然后再进行计算。
三、运算符
在Java语言中支持如下运算符:
1.算术运算符
+
"+"号的用法有三种 表示数与数之间的相加:
int a = 5;
int b = 10;
System.out.println(a+b);
表示数值的正负:+3
表示数与字符串的连接:
int a = 10;
System.out.println("a="+a);//数值与字符串之间的连接
String b = "ab";
String c = "cd";
System.out.println(b+c);//字符串与字符串之间的连接
-
"-"号与"+"号的区别在于不作为字符串与字符串,数值与字符串之间的连接
"*","/"作为数与数之间的计算中,但需要注意优先级
++,--
int a1 = 10;
a1+=a1++;//先取值,后运算
System.out.println(a1);
int a2 = 10;
a2+=++a2;//先运算,后取值
System.out.println(a2);
2、比较运算符
比较运算符的结果都是boolean型,也就是要么是true,要么是false
注意:比较运算符中"=="不能误写成"="。
3、逻辑运算符
& 逻辑与 | 逻辑或 ! 逻辑非
&& 逻辑与(短路与) || 逻辑或(短路或) ^ 逻辑异或
int a = 5;
int b = 10;
int x = 15;
int y = 20;
System.out.println(a<b & x<y);//true & ture --> true
System.out.println(a<b & x>y);//true & false--> false
System.out.println(a>b & x>++y);//false & false--> false
System.out.println(y);
System.out.println("--------------------------------");
// && 双逻辑与
//左边为真,右边参与运算,左边为假,右边不参与运算
System.out.println(a<b && x<y);//true & ture --> true
System.out.println(a<b && x>y);//true & false--> false
System.out.println(a>b && ++x>y);//false & false--> false
System.out.println(y);
System.out.println("\n");
// | 单逻辑或 两边有一为真,结果为真
//左边无论真假,右边都将进行运算
System.out.println(a<b & x<y);//true & ture --> true
System.out.println(a<b & x>++y);//true & false--> false
System.out.println(a>b & x>y);//false & false--> false
System.out.println(y);
System.out.println("--------------------------------");
// || 双逻辑或
//左边为真,右边不参与运算,左边为假,右边参与运算
System.out.println(a<b & x<y);//true & ture --> true
System.out.println(a<b & x>++y);//true & false--> false
System.out.println(a>b & x>y);//false & false--> false
System.out.println(y);
System.out.println("\n");
// ! 逻辑非
System.out.println(x>y);//false
System.out.println(!(x>y));//true
System.out.println("--------------------------------");
// ^ 逻辑异或
//两边相等为假,两边不等为真
System.out.println(x>y ^ a<b);//false true --> true
System.out.println(x<y ^ a<b);//true true --> false
4、赋值运算符
通过符号"="进行操作
当"="两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
所以需要注意强制转换导致的误差,例如:
short s = 3;//int --> short
//如果表示为s=s+2 short = short + int ,会出现int类型转换成short类型,所以会出现报错
s+=2;
int i = 1;
i *= 0.1;
System.out.println(i);//0 输出时出现取整
扩展赋值运算符: +=,-=,*=,/=,%=
5、条件运算符
语法:(条件表达式)?表达式1:表达式2;
如上图:当条件表达式为真时,运算输出的结果是表达式1;当条件表达式为假,运算输出的结果是表达式2。
如果运算后的结果赋给新的变量,要求表达式1和表达式2为同种或兼容的类型
例如:
int a = 60;
String result = (a>=60)?"及格":"不及格";
//这里条件运算符的返回值为true或者false,所以"及格""比不及格"都是字符串,类型相同
System.out.println(result);
6、位运算符
用于优化算法,减小运行开销
对位运算符的解释
位: 二进制的bit位
<<左移 移一位相当于给数乘2
>>右移 移一位相当于给数除2
>>>无符号右移
& | ^ 可以进行逻辑运算(左右两边是逻辑值),也可以进行位运算(数值)
int a = -8;
//1000 -8
a = a>>1;
//1111 ... 1100 -4
System.out.println(a);
a = a<<1;
//1111 ... 0000 -8
System.out.println(a);
//无符号右移
int b = -8;
b = b>>>1;
//0111 ... 1100 2147483644
System.out.println(b);
int m = 3;
int n = 4;
//0011 3
//0100 4
System.out.println(m&n);// 0
System.out.println(m|n);// 7
System.out.println(m^n);// 8
System.out.println(~m);// -4
其中需注意无符号移动的特殊性会导致所输出的数出现很大的区别
控制台输入
Java提供Scanner类来实现从控制台向程序输入信息功能。
具体步骤:
1. 导入使用的类:import java.util.Scanner;
2. 创建Scanner类型的对象:Scanner scan = new Scanner(System.in);
3. 调用Scanner类的相关方法,来获取指定类型的变量
next()方法用以 取得用户输入的字符串;
nextInt()将取得的输入字符串转换为整数类型;
nextFloat()转换成浮点型;
nextBoolean()转 换成布尔型。
例如:
import java.util.Scanner;//导入使用的类
public class Demo12 {
public static void main(String[] args) {
//创建一个能够输入的对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入名称");
String name = scanner.next();//读入控制台输入的类型 next()返回字符串
System.out.println("请输入年龄");
int age = scanner.nextInt();//读入控制台输入的年龄 nextInt()返回整数
System.out.println("姓名"+name+"年龄"+age);
}
}
四、控制语句
1、条件语句
根据不同条件,执行不同语句
if
if else
if else if
if(条件表达式,最后返回一个boolean值){} if(条件表达式,最后返回一个boolean值){ }else if(条件表达式,最后返回一个boolean值) if(条件表达式,最后返回一个boolean值){ }else if(条件表达式,最后返回一个boolean值){ }else{} if/else/for 语句后就算只有一行代码,最好加上一个{} 避免歧义
代码实现:
public static void main(String[] args) {
int w = 3;
if (w>=3)
System.out.println("成立1");//不加{}if只能控制离他最近的一行代码
System.out.println("成立2");//不在if的可控范围内
if (w==1){
}else if (w==2){
}else if (w==3){
}
}
swtich
switch语句的基本应用
switch语句 switch(表达式){ case value1: 语句序列1; [break]; ...... case valueN:语句序列N; [break]; [default: 缺省语句;]
代码实现:
String week = "3";
switch (week){
case "1" :
System.out.println(1);
break;
case "2" :
System.out.println(2);
break;
case "3":
System.out.println(3);
case "4":
System.out.println(4);
break;
case "5":
System.out.println(4);
break;
default:
System.out.println("输入错误");
}
2、循环语句
重复执行某些动作
for
for语句的基本应用
for(表达式1; 表达式2; 表达式3){ 语句; … ; }
代码实现:
for (int i=0;i<5;i++){
System.out.println(i);
}
还可以写为以下两种形式
for (;i<5;i++){
System.out.println(i);
}
System.out.println(i);
int i=0;
for (;i<5;){
System.out.println(i);
i++;
}
System.out.println(i);
运行结果都相同
for循环也可以实现死循环
代码实现:
for(;;){
System.out.println(1);
}
while
while语句的基本应用
//初始化部分 while(逻辑表达式){ 循环体 迭代部分 }
执行过程中 会先判断逻辑表达式的值 若=true 则执行其后面的语句,然后再次判断条件并反复执行,直到条件不成立为止
代码实现:
int a = 0;
while (a<5){
System.out.println(a);
a++;
}
while语句的死循环的实现
注意while后的()中只能输入true或false,不能输入1或0,这是Java于c语言的区别
while (true){
System.out.println(1);
}
do while;
do{ 循环体 }while(逻辑表达式);
执行过程
先执行语句,再判断逻辑表达式的值,若为true,再执行语句,否则结束循环。
代码实现:
int a;
do{
System.out.println("请输入一个整数");
Scanner scanner = new Scanner(System.in);
a = scanner.nextInt();
}while (a==10);
1、三种循环的对比
1、从循环次数角度分析
2、如何选择
break与continue
int stop = 4;
for (int i = 1; i <= 10; i++) {
//当i等于stop时,退出循环
if (i == stop){
break;
}
System.out.println(" i= " + i);
}
int skip = 4;
for (int i = 1; i <= 5; i++) {
//当i等于skip时,跳过当次循环
if (i == skip){
continue;
}
循环嵌套
for (int i = 0; i < 4; i++) {//外层循环
for (int j = 0; j < 4; j++) {//内存循环
System.out.print("*");
}
System.out.println();//换行
}
out:for (int i = 0; i <5 ; i++) {
for (int j = 0; j < 5; j++) {
if(j==3){
break out;
//break只能结束所在的那一层循环,不能结束外层循环 break 标签名(循环名字)
}
System.out.println("j=="+j);
}
System.out.println("i=="+i);
}
System.out.println("*"); //println() 会自动换行
System.out.println("*");
System.out.println("*");
System.out.print("a");
System.out.print("a");
System.out.print("a"); //print() 不会自动换行
五、Java中的方法
/*
方法定义:
public 访问权限
static 静态的 直接可以使用类名调用
void 表示此方法没有返回值
menu 方法名
() 参数列表
{ } 方法体
*/
public static void menu(){
System.out.println("--------家庭收支记账软件--------");
System.out.println("1.收支明细");
System.out.println("2.登记收入");
System.out.println("3.登记支出");
System.out.println("4.退出");
}
//java入口 固定格式
public static void main(String[] args) {
//menu为上方代码中的方法
Demo7.menu();//调用方法
int n = 10;//注意类型之间的转换
Demo7.print(n,10);
int max = Demo7.max(6,16);//实参 是调用时传入的数据
System.out.println(max);
}
public static int max(int a,int b) {
return (a>b)?a:b;
}
public static void print(int num,int b) {
if(num<=0){
return;
//return 也可以在没有返回值的方法中使用,表示终止方法运行,但是return后面不能有任何的表达式
}