Java概述
Jre:java运行环境
Jvm:java虚拟机
Jdk:java开发工具包。包含了jre,安装了jdk就不用安装jre。包含了javac.exe (编译工具)和java.exe(运行工具)等。
即使用jdk开发完成的java程序,交给jre运行。
jdk下载:通过官方网站获取JDK:http://www.oracle.com
Java语言是跨平台的,可以在不同的系统中运行。是因为有jvm的存在,原理是:只要在需要运行java应用程序的操作系统上,先安装一个java虚拟机即可。由jvm来负责java程序在该系统中的运行。
配置环境变量:
path:去哪里找编译或运行等工具(必须设置),在path里加上分号之后粘贴jdk的bin的目录和jre的bin的目录。
eg:;C:\Program Files\Java\jdk1.8.0\bin;C:\ProgramFiles\Java\jdk1.8.0\jre\bin
JAVA_HOME:jdk的安装目录(新建环境变量)
eg:C:\Program Files\Java\jdk1.8.0\bin
classpath:去哪里找需要运行的class文件(可以不用设置,建议设置)(新建环境变量),先写一个.; (点和分号),后面在跟上jdk下面的lib目录,lib所在的上一层目录和JAVA_HOME一样,所以可以引用,即加上%引用变量名。
eg:.;%JAVA_HOME%/lib
程序分析:
1. 编写java源代码程序,文件扩展名为.java
2. 通过javac.exe对代码进行编译,生成字节码文件(即class文件,虚拟机能看懂的文件)
3. 通过java.exe对class文件进行运行。执行时不需要加.class后缀名。
Java中注释(使代码具有可读性)分类格式:
单行注释 格式://注释文字
多行注释 格式:/*注释文字*/
文档注释 格式:/**注释文字*/
关键字:被Java语言赋予特定含义的单词。全部小写
标识符(给类,接口,方法,变量等起名字时使用的字符序列)
组成:字母数字下划线$,不能以数字开头,需要区分大小写。
常见命名规则:
包(其实就是文件夹,用于解决相同类名问题):纯小写,单词之间用点连接(com.yunhe.cn)
类或者接口:每个单词首字母大写(HelloWorld)
方法和变量:第一个单词首字母小写,第二个单词开始首字母大写(main,userName)
成员变量(全局变量)和局部变量:
成员变量是在类内方法外定义,作用范围是整个类,可以不赋初始值,系统自动分配该类型的默认值。
局部变量是在方法内定义,作用范围是从定义他的地方开始,到他所定义的代码块结束的地方,必须赋初值。
常量:纯大写
数据类型:(基本数据类型,引用数据类型)
四类八种基本数据类型:数值型(整数类型:byte,short,int,long。浮点类型:float,double)
字符型(char)
布尔型(boolean)
引用数据类型
类型转换:
默认转换:
byte,short,char—int—long—float—double
byte,short,char相互之间不转换,他们参与运算首先转换为int类型
强制转换:
目标类型 变量名=(目标类型)(被转换的数据);
Int b = (int)a;
byte,short,char在做运算的时候,默认转为int
Eg:
byte b1 = 12,b2 = 13;//声明byte变量b1 = 12,b2 = 13
byte b3 = (byte)(b1+b2);//做运算
System.out.println("b3的值是"+b3);//错误: 不兼容的类型: 从int转换到byte可能会有损失(报错原因:在byte做运算时,会自动转换为int,所以应该定义一个int类型的变量b3来接收,此处定义的变量b3是byte类型,所以会报错)
byte b1 = 13;
byte b2;
byte b4 = (byte)(b1+b2);//Var5.java:23: 错误: 可能尚未初始化变量b2
整数类型默认是int,所以在定义long类型时,默认是int类型的,当数值超出int类型的范围时,系统就会报错,所以在用long类型时需要在数值后面加上L或l。
浮点型默认是double类型,所以在定义float类型时需要在数值后面加上F或f。如:float a = 3.014f;
自增自减
+=符号:表示把运算符左边的变量与右边进行运算,再把结果赋值给左边变量。自带强转。
Eg:
byte b1 = 13;
b1 += 4;(不会报错,因为+=符号在运算时自带强转)
//b1 = b1+4;//不兼容的类型: 从int转换到byte可能会有损失(报错原因:byte在运算时会自动转换为int类型)
运算符:
&: 有false则为false(与运算)
|: 有true则为true(或运算)
^: 相同则为false 不同则为true(异或运算)
!: 偶数个结果不变 奇数个结果相反(非运算)
&&: 与 & 结果一致(与&的区别是:&&在进行左边的运算时如果结果是false,那么就已经确定了左右最后的运算结果是false,所以右边就不进行运算。当左边的是true时,才会对右边进一步运算。一般用&&较多。而&两边都做运算。)
||: 与| 结果一致(与|的区别是:||在进行左边的运算时如果结果是true,那么就已经确定了左右最后的运算结果是true,所以右边就不进行运算。当左边的是false时,才会对右边进一步运算。一般用||较多。而|两边都做运算。)
Eg:
int a = 3;
int b = 4;
boolean b2 = (++a == 3 && b++ == 4);//a先自增再赋值,++a的结果是4,&&左边的运算结果是false,已经确定了整个括号里的值是false,所以&&右边的b++就不再进行运算。b的值还是4
boolean b1 = (a ++ == 3 && b++ ==4);//a++表示先把a的值赋给表达式a++,a再自增,所以a++表达式的值是3,&&左边做运算的结果是true,不能确定&&结果是什么,需要对&&右边进行运算,b++是先把b的值赋给表达式b++结果为4,然后再进行自增,b为5,所以&&右边的运算结果是true,则左右两边 都是true,那么&&结果为true。
System.out.println(b1+" "+a+" "+b);//false true a:4 b:5
System.out.println(b2+" "+a+" "+b);//false a:4 b:4
三目运算符:
x?y:z;
x:关系表达式 结果类型是boolean类型
y:值
z:值
表示x这个关系表达式的值如果为true,则把y的值赋给表达式,如果为false,则把z的值赋给表达式。
Eg:
int max = a>b?a:b;
System.out.println(max);
switch语句:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
....
default:
语句体n;
break;
}
注意事项:
1. break可以省掉,但是省掉之后case会发生穿透现象,继续执行下一个case不管下一个case是否满足他的值,直到遇到break才会跳出。
2. 表达式的值的类型与case的值的类型保持一致。
3. case的值只能是常量。
4. case的值不能重复。
5. Switch支持的数据类型:byte,short,int,char,String,enum(枚举)
6. Default可以省掉,但是不建议,一般用来处理错误值。即switch的值没有匹配到相应的case值时,才会执行default,default的break也具有穿透现象。
7. Switch的执行流程是,进去之后从上到下依次比对case值,而default无论写在什么地方都是最后没有匹配成功才会执行的。
循环语句:
For循环结构:for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
Eg:
int sum = 0;
for(int i = 1;i<=10;i++){//遍历1-10
sum = sum+i;//累加
}
For循环嵌套:eg:
for(int i = 1;i<=5;i++){//控制行
for(int j = 1;j<=6;j++){//控制列
System.out.print("*");
}
System.out.println();
}
While循环:
基本格式:
while(判断条件语句) {
循环体语句;
}
扩展格式:
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
Do while循环:
do {
循环体语句;
}while(判断条件语句);
While与do while的区别:while循环判断后才能循环,而do while不管条件如何,都会先去执行do循环语句,也就是do while至少会循环依次,而while可能一次都不循环。
跳转语句:
for(int i = 1;i<=10;i++){
if(i == 5){
break;//终止该层循环;(终止他所在的那一层for循环)
//continue;//结束当次循环,并开始下一次循环(跳过i =5这一次循环,继续i=6的循环)
//return;//结束方法
}
System.out.println("Hello World"+i);
}
水仙花数
i/100%10百位
i/10%10十位
i%10个位