注意:当在默认情况下,运行每个字节码文件时在当前目录下找,如果找到则运行,否则报错
临时配置classpath 1.使用set命令完成临时配置classpath: set classpath=F:\javacourse\javalearning\src\javapack找到运行,找不到就报错; set classpath=F:\javacourse\javalearning\src\javapack;找到就运行,找不到就在当前目录下找,找到运行找不到报错; set classpath=F:\javacourse\javalearning\src\javapack;F:\javacourse从前往后找 2.使用set命令完成查看c是否lasspath配置:set classpath 3.使用set命令完成删除classpath配置:set classpath= 永久配置classpath 永远去你配置的路径找,不建议配置永久classpath
在java中具有特殊意义的,全部小写 如:class,public,static,void…
也就是名字,对类名、变量名、方法名、参数名的修饰
以字母、下划线或$开头,其后可以是字母、数字、下划线或美元符号。区分大小写,不能使用关键字
常用进制:二进制(0,1),八进制(0-7),十进制(0-9),十六进制(0-9,A-F)
按某种格式某种规定将数据存在计算机中
常用的字符编码:
ASCII:‘a’--------->97 ‘b’------------->98 ‘A’------>65 ‘0’------->48… iso8859-1:西欧语言编码,兼容ASCII码 GBK/GB2312:中文编码 Unicode:统一全球所有国家的文字 常用的有:utf-8 utf-16 utf-32 注意:java源代码采用unicode编码 乱码、编码、解码
变量: 存放数据,且该变量中的数据时可以发生改变的
整数类型int,浮点类型double,字符串类型string,字符类型char,布尔类型Boolean
声明的同时完成赋值: 语法格式:数据类型 变量名称 = 值
class Var01{ public static void main(String[] args){ //优化Var代码,在声明的同时完成赋值 //第一步,声明变量并且赋值 int a = 100; double b = 3.14; String c = "北京市"; //第二步,使用 System.out.println("a = "+ a); // +表示连接 System.out.println("b = "+ b); System.out.println("c = "+ c); } }多个变量类型相同,可以一次声明多个变量,之间使用逗号隔开:
class Var02{ public static void main(String[] args){ //将0.1,99.87,-1,59.9存放在变量中,并输出变量的值 //如果有多个变量类型相同,可以一次声明多个变量,之间使用逗号隔开 double a = 0.1,b = 99.87,d = 59.9; int c = -1; //第二步,使用 System.out.println("a = "+ a + "\nb = "+b+"\nc = "+c+"\nd = "+d); } }按声明位置(作用范围)分为: 局部变量:在方法中声明的,如main 全局变量:在类中声明,class下
按数据类型范围: 基本数据类型变量:在内存中存放真正的值 引用数据类型变量:在内存中存放地址(引用)
1.当运行程序时,在内存中JVM会自动分配空间
2.内存中包含 栈:存放方法以及方法中的局部变量 堆:存放方法对象 方法区:代码片段、常量池、静态属性
class Var04{ public static void main(String[] args){ int i; double j; i = 123; String s; char ch; ch = '男'; j = 3.14; s = "李四"; } }内存分析图: 结论: 基本数据类型的变量 在内存中存放真正的值,比如int、char、double
引用数据类型变量 在内存中存放地址,比如:String
又分为4大类共计8种
整数类型: byte,short,int,long
整数类型中默认为int 整数类型各自取值范围
类型占用存储空间存储范围byte1字节-128~127short2字节 [ − 2 15 , 2 15 − 1 ] [-2^{15},2^{15}-1] [−215,215−1]int4字节 [ − 2 31 , 2 31 − 1 ] [-2^{31},2^{31}-1] [−231,231−1]long8字节 [ − 2 63 , 2 63 − 1 ] [-2^{63},2^{63}-1] [−263,263−1] class Var05{ public static void main(String[] args){ //byte byte a = 1;//注意:在java中,当对byte,short,char类型赋值,若没超范围则直接赋值 a = 5; // a = 128; // 超过了范围 System.out.println("a = "+a); //long long d = 6; d = 123456; // d = 123456789009;//出现编译错误,因为默认类型为int d = 123456789009L;//就变成了long,l或L } }浮点类型: float,double(默认)
类型占用内存空间存储范围float4字节-3.404E38~3.404E38double8字节-1.789E308~1.789E308 class Var06{ public static void main(String[] args){ //浮点类型 double x = 0.1; x = 999.99; System.out.println("x="+x); // float y = 0.87;//取值大的类型不能直接给小的赋值 float y = 0.87f;//解决办法1 float y = (float)0.87;//解决办法2:强制类型转换 } }字符类型: char
一次只能存放一个,并且使用英文的单引号引起来一个汉字表示一个字符整数类型和字符类型是可以相互转换的字符类型取值范围0------>65535占两个字节 class Var07{ public static void main(String[] args){ //字符类型 char ch = 'a'; ch = '好'; ch = 100;//注意整数值直接给字符赋值,存放的是ASCII码对应的字符 // ch = -1;//注意字符类型是有取值范围的:0---->65535 System.out.println("ch = "+ch); int i = 6; i = 'a';//字符也可以给int赋值,存放的是对应的ASCII码值 System.out.println("i = "+i); } }布尔类型: boolean
布尔类型只有两种取值,分别是true、false布尔类型占一个字节 class Var08{ public static void main(String[] args){ //布尔类型 boolean x = true; System.out.println("x = "+x); } }+ - * / %(求余,取模) ++ --
public class Datatype { public static void main(String[] args){ //当+两边操作数都是数值类型时,则做加法运算 System.out.println(10 + 20);//30 System.out.println(10 + 20.0);//30.0 int a = 3,b = 4; int sum = a + b; double k = 1.2; //当+两边操作数中有一个为非数值型,则做连接 System.out.println("sum="+sum);//sum=7 System.out.println("sum="+a +b);//sum=34 System.out.println("sum="+(a+b));//sum=7 //-,必须保证两个操作数都是数值类型 System.out.println(10-20); System.out.println(6-4.3); int x = 5,y=6; int z=x-y; System.out.println("z="+z);//z=-1 System.out.println("z="+(x-y));//z=-1 //* System.out.println(5*6); System.out.println(5.0*6); int m=3,n=4; int l = m*n; System.out.println("l="+l);//12 System.out.println("l="+m*n);//12 System.out.println(10/2);//5 System.out.println(10/3);//3 System.out.println(7/2.0);//3.5 System.out.println("s结果="+20/6);//3 System.out.println(10%5);//0 System.out.println(9%3.0);//0.0 System.out.println(4%6);//4 System.out.println(0%10);//0 System.out.println(6%0);//除数不能为0 } }综合案例:
class Operator{ public static void main(String[] args){ //练习:计算123各个位之和 int num=123; int gw=num%10; int sw=num/10%10; int bw=num/100; int sum=gw+sw+bw; System.out.println("sum="+sum);//sum=6 } }++ ++:表示自身加一 前置++:将++编写在变量名称前面,例如++a;先自身加1再做其他运算 后置++:将++编写在变量名称后面,例如a++;先做其他运算再加一
--
–:自身减一,也分为前置减减和后置减减
class Operator01{ public static void main(String[] args){ //++ int a = 3; int b = ++a; System.out.println("a="+a+"\nb="+b);//a=4,b=4 int x = 5;/* int y = x++; System.out.println("x="+x+"\ny="+y);//x=6,y=5 */ int z = x++ +2; System.out.println("x="+x+"\nz="+z);//x=6,z=7 } }求和、连接
class Operator02{ public static void main(String[] args){ int a = 12; int b = 3; String s =""+a+b;//有非数值就是拼接 System.out.println("s="+s);//s=123 } }扩展赋值运算符:+=,-=,*=,/=
class Operator03{ public static void main(String[] args){ int x = 5; x += 0.5;//自动类型转换。x=x+0.5会出现编译错误。 System.out.println("x="+x);//x=5 int a = 123,s=0; s = s*10+a%10;//s=3 //s *= 10+a;//s=s*(10+a) System.out.println("s="+s); } }优先级别:算术运算符>关系运算符>赋值运算符
class Operator04{ public static void main(String[] args){ //关系运算符,结果为布尔类型的值 System.out.println(1>2); //false System.out.println(10>9); //true System.out.println(5 != 3); //true //优先级别:算术运算符>关系运算符>赋值运算符 System.out.println(9 % 2==0); //false System.out.println(2 + 3/6 <= 4*2%5);//true,2<=3 boolean b = 7/4+5%2 == 16/8-5*2%3;//false } }逻辑与&,逻辑或|,逻辑异或^,逻辑非!,短路与&&,短路或||
逻辑异或: 当两个条件的值不同时,则结果为true,否则为false
逻辑非!: 对布尔类型取反
class Operator05{ public static void main(String[] args){ //逻辑运算符 System.out.println(9>1 & 0 != 1); //true System.out.println(3 <= 1 & 100 > 10);//false System.out.println(8 != 9 ^ 12 >10);//false System.out.println(!false);//true System.out.println(!(1>9));//true //优先级别:算术运算符>关系运算符>逻辑运算符 System.out.println(9/6 -4%2 > 0 & 18%9 == 0);//true //短路与和逻辑与运行结果一样,执行过程不同 System.out.println(3>19 && 0<1);//第一个为false就为false,否则继续判断 System.out.println(3>19 & 0<1);//每一个都要判断 //短路或和逻辑或运行结果一样,短路或第一个结果为true,直接输出true System.out.println(1 != 2 || 55>66);//true System.out.println(1 != 2 | 55>66);//true } }也叫条件运算符: 条件 ? 代码1:代码2
class Operator06{ public static void main(String[] args){ //三目运算符 String s = 10>20 ? "大于":"不大于"; System.out.println("s="+s);//s=不大于 int num = -3; int i = num > 0 ? 1 : num < 0 ? -1 : 0;//三种情况嵌套 System.out.println("i="+i);//i=-1 } }源文件首行输入:
package day03; import java.util.Scanner; class Input07{ public static void main(String[] args){ //输入一个数并将概数输出 //第二步:创建Scanner对象 Scanner input = new Scanner(System.in); //第三步:友好提示 System.out.println("请输入一个数:"); //第四步:键盘输入 int num = input.nextInt();//等待接收用户键盘输入值,回车键结束 System.out.println("num="+num); } } class Input08{ public static void main(String[] args){ //计算两个数的和 Scanner input = new Scanner(System.in); System.out.println("请输入第一个数:"); int num1 = input.nextInt(); System.out.println("请输入第二个数:"); int num2 = input.nextInt(); int sum = num1 + num2; System.out.println(num1 + "+" + num2 + "=" + sum); } }输入学生信息
class Input09{ public static void main(String[] args){ //输入某个学生的信息(姓名,年龄,性别,成绩,现住址,婚否),输出所有信息 Scanner input = new Scanner(System.in); System.out.print("请输入姓名:"); String name = input.next();//注意:在java中,键盘接收字符串类型时没有nextString(),而使用的是next() System.out.print("请输入年龄:"); int age = input.nextInt(); System.out.print("请输入性别:"); String s = input.next();//先接收字符串类型,然后再字符串获取第0个位置的值,则使用charAt(0) char sex = s.charAt(0); System.out.print("请输入成绩:"); double score = input.nextDouble(); System.out.print("请输入现住址:"); String address = input.next(); System.out.print("请输入现婚否(true表示已婚,false表示未婚):"); boolean isFlag = input.nextBoolean(); System.out.println("\n学生信息如下:"); System.out.println("姓名:"+name+"\n年龄:"+age+"\n性别:"+sex+"\n成绩:"+score+"\n现住址:"+address+"\n婚否:"+isFlag); } }顺序结构: 按顺序逐行进行执行 选择结构: 循环结构:
语法格式:
if (条件) { 代码块 }当做两种或两种以上的情况时,则可以使用多重if选择结构完成
if(条件1){ 代码块1 }else if(条件2){ 代码块2 } class If02 { public static void main(String[] args){ //练习:加入张三参加java考试,判断如果在95分以上有奖励,否则发红包 Scanner input = new Scanner(System.in); System.out.print("请输入成绩:"); double score = input.nextDouble(); /* 法一:使用两个if块 if(score>95){ System.out.println("有奖励"); } if(score<=95){ System.out.println("发红包"); } */ /* 法二:使用if else if(score>95){ System.out.println("有奖励"); }else{ System.out.println("发红包"); } */ /* 法三:使用三目运算符完成 System.out.println(score>95 ? "有奖励" : "发红包"); */ // 法四:多重if if(score>95){ System.out.println("有奖励"); }else if(score<=95){ System.out.println("发红包"); } } }练习:根据输入的年龄,输出老年,中年,青年还是少年
1.注意条件的顺序 2.注意最后else(可省略)
class If03 { public static void main(String[] args){ //练习:根据输入的年龄,输出老年,中年,青年还是少年,注意条件的顺序 Scanner input = new Scanner(System.in); System.out.print("请输入年龄:"); int age = input.nextInt(); if(age >= 55){ System.out.println("老年"); }else if(age >= 30){ System.out.println("中年"); }else if(age >= 18){ System.out.println("青年"); }else if(age < 18 && age > 0){ System.out.println("少年"); } System.out.println("错误的输入"); } }练习:判断一个数是奇数还是偶数
class If04 { public static void main(String[] args){ //练习:判断一个数是奇数还是偶数 Scanner input = new Scanner(System.in); System.out.print("请输入一个数:"); int num = input.nextInt(); //判断当前数num是否是奇数还是偶数 if(num % 2 == 0){ System.out.println(num+"是偶数"); }else{ System.out.println(num+"是奇数"); } } }练习:判断一个三位正整数是否为水仙花数
class If05 { public static void main(String[] args){ //练习:判断一个三位正整数是否为水仙花数 Scanner input = new Scanner(System.in); System.out.print("请输入一个数:"); int num = input.nextInt(); //判断当前数num是否是三位正整数 if(num >= 100 && num <= 999){ //获取各个位上的数 int bw = num/100,sw = num%100/10,gw = num%10; //计算各个位的立方和 int sum = bw*bw*bw+sw*sw*sw+gw*gw*gw; //判断是否相等 if(sum == num){ System.out.println(num+"是水仙花数"); } System.out.println(num+"不是水仙花数"); }else{ System.out.println(num+"不是三位正整数"); } } }字符串进行比较
案例:第一名奖励10w,第二名奖励5w,第三名奖励2w,其他情况不奖励
class If06 { public static void main(String[] args){ //练习:输入名次输出奖励 Scanner input = new Scanner(System.in); System.out.print("请输入名次:"); String info = input.next(); /* if(info == "第一名"){ System.out.println("奖励10w"); }else if(info == "第二名"){ System.out.println("奖励5w"); }else if(info == "第三名"){ System.out.println("奖励2w"); }else{ System.out.println("对不起,没有任何奖励"); } */ //java中使用==比较的是地址是否一致,如果在字符串中比较必须使用equals //当字符串进行比较内容时,建议固定值编写在前面 if("第一名".equals(info)){ System.out.println("奖励10w"); }else if("第二一名".equals(info)){ System.out.println("奖励5w"); }else if("第三名".equals(info)){ System.out.println("奖励2w"); }else{ System.out.println("对不起,没有任何奖励"); } } }当做等值操作时,可以使用switch case 语法格式:
switch(表达式){ case 常量值1: 操作1; break; case 常量值2: 操作2; break; default: }注意:
表达式可以是byte、short、int、char类型,在JDK7.0及以后还可以是String类型、枚举在switch中编写任意多个case常量值类型必须与表达式类型一致当遇到break则执行switch case外面的语句default可有可无,如果有一个switch只有一个 class Switch07 { public static void main(String[] args){ //练习:输入名次输出奖励 Scanner input = new Scanner(System.in); System.out.print("请输入名次:"); String info = input.next(); switch(info){ case "第一名": System.out.println("奖励10w"); break;//表示中断,当遇到break则执行switch case外面的语句 case "第二名": System.out.println("奖励5w"); break; case "第三名": System.out.println("奖励2w"); break; default: System.out.println("对不起,没有任何奖励"); break; } } }常见的注意事项:
case后面顺序可以任意default位置也可以任意,建议在最后面break可有可无,当没有break则从当前第一个匹配的case一直向下执行(就是穿透)。因此根据题意适当添加breakcase也可以合并 class Switch08 { public static void main(String[] args){ //练习:输入每天该做的事情 Scanner input = new Scanner(System.in); System.out.print("请输入字符类型星期(一~日):"); char week = input.next().charAt(0); switch(week){ case '一': case '二': case '四': case '六': System.out.println("学习"); break; case '三': case '五': System.out.println("自习"); break; case '日': System.out.println("休息"); break; } } }多重if:可以做等值操作,也可以做区间操作 switch case:只能做等值操作
