1. java程序编写-编译-运行的过程
编写:我们将编写的java代码保存在以".java"结尾的源文件中
编译:使用javac.exe命令编译我们的java源文件。格式:javac 源文件名.java
运行:使用java.exe命令解释运行我们的字节码文件。 格式:java 类名
2.
在一个java源文件中可以声明多个class。但是,只能最多有一个类声明为public的。
而且要求声明为public的类的类名必须与源文件名相同。 重点
3. 程序的入口是main()方法。格式是固定的。
4. 输出语句:
System.out.println():先输出数据,然后换行
System.out.print():只输出数据
5.每一行执行语句都以";"结束。
6.编译的过程:编译以后,会生成一个或多个字节码文件。字节码文件的文件名与java源文件中的类名相同。
说明基本数据类型变量之间强制类型转换的使用规则和强转可能出现的问题。
容量大 à 容量小
使用强转符:()
精度损失。
说明基本数据类型变量之间自动类型提升的运算规则。
byte、short、char -àint àlong àfloat àdouble
关于字符串String使用(引用数据类型)
String不是基本数据类型,属于引用数据类型
使用方式与基本数据类型一致。例如:String str = “abcd”;
一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据。
1. String属于引用数据类型,翻译为:字符串
2. 声明String类型变量时,使用一对""
3. String可以和8种基本数据类型变量做运算,且运算只能是连接运算:+
4. 运算的结果仍然是String类型
例如:str = str + “xyz” ; int n = 100; str = str + n;
System.out .println(3+4+“Hello!”); //输出:7Hello!
System.out.println(“Hello!”+3+4); //输出:Hello!34(纯连接)
System.out.println(‘a’+1+“Hello!”); //输出:98Hello!
System.out.println(“Hello”+‘a’+1); //输出:Helloa1
强制类型转换
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使 用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意。
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可 以实现把字符串转换成基本类型。
System.out.println(c + num + str);//107hello 因为char与int做运算
System.out.println(c + str + num);//ahello10 c+str不是加法起连接作用
System.out.println(c + (num + str));//a10hello
System.out.println((c + num) + str);//107hello
System.out.println(str + num + c);//hello10a str+num起连接作用
注意只要出现String后面连锁反应都是String,起连接作用
String str1 = 123;//编译不通过
String str1 = 123 + "";//编译通过
System.out.println(str1);//结果为"123"
int num1 = str1;不能!
int num1 = (int)str1;//"123" 不能! 可以使用Integer.parseInt(str1);
如: String a = “43”;
int i = Integer.parseInt(a);(通过包装类可以)
注意:boolean类型不可以转换为其它的数据类型。
进 制
对于整数,有四种表示方式:
> 二进制(binary):0,1 ,满2进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不区分大小写。
如:0x21AF +1= 0X21B0
例:
int num1 = 0b110;
int num2 = 110;
int num3 = 0127;
int num4 = 0x110A;
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
System.out.println("num4 = " + num4);
结果·num1 = 6
num2 = 110
num3 = 87
num4 = 4362
二进制转十进制
当符号位是0的时候
结果为1* 2^3 + 1*2^2 = 12
当符号位是1的时候
十进制 转化 二进制:除2取余的逆
如 13
2 6 101100取逆为 1101
3
1
0
0
上图:3个一位 最高是7
下图:4个一位 最高是F
运算符
算术运算符
例子:
//除号:/
int num1 = 12;
int num2 = 5;
int result1 = num1 / num2;
System.out.println(result1);//2
int result2 = num1 / num2 * num2;
System.out.println(result2);//10
double result3 = num1 / num2;
System.out.println(result3);//2.0
double result4 = num1 / num2 + 0.0;//2.0
double result5 = num1 / (num2 + 0.0);//2.4
double result6 = (double)num1 / num2;//2.4
double result7 = (double)(num1 / num2);//2.0
System.out.println(result5);
System.out.println(result6);
//(把握运算的本质)
// %:取余运算
//结果的符号与被模数的符号相同
//开发中,经常使用%来判断能否被除尽的情况。
int m1 = 12;
int n1 = 5;
System.out.println("m1 % n1 = " + m1 % n1);
int m2 = -12;
int n2 = 5;
System.out.println("m2 % n2 = " + m2 % n2);
int m3 = 12;
int n3 = -5;
System.out.println("m3 % n3 = " + m3 % n3);
int m4 = -12;
int n4 = -5;
System.out.println("m4 % n4 = " + m4 % n4);
//(前)++ :先自增1,后运算
//(后)++ :先运算,后自增1
int a1 = 10;
int b1 = ++a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);
(a1自增1 得a1等于11 然后将值赋值给b1得11)
int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b2 = " + b2);
(先把a2的值给了b2,得b2为10,再自加得a1等于11)
int a3 = 10;
++a3;//a3++;
int b3 = a3;
//注意点:
short s1 = 10;
//s1 = s1 + 1;//编译失败
//s1 = (short)(s1 + 1);//正确的
s1++;//自增1不会改变本身变量的数据类型
System.out.println(s1);
//问题:
byte bb1 =127;
bb1++;
System.out.println("bb1 = " + bb1);
//(前)-- :先自减1,后运算
//(后)-- :先运算,后自减1
int a4 = 10;
int b4 = a4--;//int b4 = --a4;(a4先自减1,为9,再将该值赋给b4,得b4为9
a4先赋值给b4,为10,再自减得a4为9
System.out.println("a4 = " + a4 + ",b4 = " + b4);
答案:
2
10
2.0
2.4
2.4
m1 % n1 = 2
m2 % n2 = -2
m3 % n3 = 2
m4 % n4 = -2
a1 = 11,b1 = 11
a2 = 11,b2 = 10
11
bb1 = -128
a4 = 9,b4 = 10
赋值运算符
int num1 = 10;
num1 += 2; //num1 = num1 + 2;(同)
System.out.println(num1);//12
int num2 = 12;
num2 %= 5; //num2 = num2 % 5;
System.out.println(num2);
short s1 = 10;
//s1 = s1 + 2;//编译失败
s1 += 2;//结论:不会改变变量本身的数据类型
System.out.println(s1);
//开发中,如果希望变量实现+2的操作,有几种方法?(前提:int num = 10;)
//方式一:num = num + 2;
//方式二:num += 2; (推荐)
//开发中,如果希望变量实现+1的操作,有几种方法?(前提:int num = 10;)
//方式一:num = num + 1;
//方式二:num += 1;
//方式三:num++; (推荐)
int n1 = 10;
n1 += (n1++) + (++n1);//n1 = n1 + (n1++) + (++n1);
System.out.println(n1);//32
10+10(n1已经变成11)+12(先加1,刚才11,先加1为12)=32
比较运算符
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
比较运算符“==”不能误写成“=” 。
例子:
class CompareTest {
public static void main(String[] args) {
int i = 10;
int j = 20;
System.out.println(i == j);//false
System.out.println(i = j);//20
boolean b1 = true;
boolean b2 = false;
System.out.println(b2 == b1);//false
System.out.println(b2 = b1);//true
}
}
逻辑运算符
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。 理解:异或,追求的是“异”
例子:
& && | || ! ^
说明:
1.逻辑运算符操作的都是boolean类型的变量
*/
class LogicTest {
public static void main(String[] args) {
//区分& 与 &&
//相同点1:& 与 && 的运算结果相同
//相同点2:当符号左边是true时,二者都会执行符号右边的运算
//不同点:当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
//开发中,推荐使用&&
boolean b1 = true;
b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
boolean b2 = true;
b2 = false;
int num2 = 10;
if(b2 && (num2++ > 0)){ //短路
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num2 = " + num2);
结果
我现在在南京
num1 = 11
我现在在南京
num2 = 10
// 区分:| 与 ||
//相同点1:| 与 || 的运算结果相同
//相同点2:当符号左边是false时,二者都会执行符号右边的运算
//不同点3:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算
//开发中,推荐使用||
boolean b3 = false;
b3 = true;
int num3 = 10;
if(b3 | (num3++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num3 = " + num3);
boolean b4 = false;
b4 = true;
int num4 = 10;
if(b4 || (num4++ > 0)){ //短路
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num4 = " + num4);
}
}
结果:
我现在在北京
num3 = 11
我现在在北京
num4 = 10
程序流程控制
三种结构
第一种:
if(条件表达式){
执行表达式
}
第二种:二选一
if(条件表达式){
执行表达式1
}else{
执行表达式2
}
第三种:n选一
if(条件表达式){
执行表达式1
}else if(条件表达式){
执行表达式2
}else if(条件表达式){
执行表达式3
}
...
else{
执行表达式n
}
例子:
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断
说明:
1. else 结构是可选的。
2. 针对于条件表达式:
> 如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。
> 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
> 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。
*/
import java.util.Scanner;
class IfTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入岳小鹏期末成绩:(0-100)");
int score = scan.nextInt();
if(score == 100){
System.out.println("奖励一辆BMW");//be my wife! BMW <---> MSN
}else if(score > 80 && score <= 99){
System.out.println("奖励一台iphone xs max");
}else if(score >= 60 && score <= 80){
System.out.println("奖励一个 iPad");
}else{
System.out.println("什么奖励也没有");
}
}
}
1.定义三个int型变量并赋值,使用三元运算符或者if-else获取这三个数中的较大数的实现
int num1 = 10,num2 = 21,num3 = -21;
int max;
if(num1 >= num2 && num1 >= num3){
max = num1;
}else if(num2 >= num1 && num2 >= num3){
max = num2;
}else{
max = num3;
}
System.out.println("三个数中的最大值为:" + max);
2.编写程序,声明2个double型变量并赋值。判断第一个数大于10.0,且第2个数小于20.0,打印两数之和。否则,打印两数的乘积。
double d1 = 12.3;
double d2 = 32.1;
if(d1 > 10 && d2 < 20){
}else{
}
3. 交换两个变量值的代码的实现
String s1 = "北京";
String s2 = "南京";
String temp = s1;
s1 = s2;
s2 = temp;
*Scanner类
如何从键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法(next() / nextXxx()),来获取指定类型的变量
注意:
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException
导致程序终止。
*/
//1.导包:import java.util.Scanner;
import java.util.Scanner;
class ScannerTest{
public static void main(String[] args){
//2.Scanner的实例化
Scanner scan = new Scanner(System.in);
//3.调用Scanner类的相关方法
System.out.println("请输入你的姓名:");
String name = scan.next();
System.out.println(name);
System.out.println("请输入你的芳龄:");
int age = scan.nextInt();
System.out.println(age);
System.out.println("请输入你的体重:");
double weight = scan.nextDouble();
System.out.println(weight);
System.out.println("你是否相中我了呢?(true/false)");
boolean isLove = scan.nextBoolean();
System.out.println(isLove);
//对于char型的获取,Scanner没有提供相关的方法。只能获取一个字符串
System.out.println("请输入你的性别:(男/女)");
String gender = scan.next();//"男"
char genderChar = gender.charAt(0);//获取索引为0位置上的字符
System.out.println(genderChar);
}
}