共计 4777 个字符,预计需要花费 12 分钟才能阅读完成。
环境配置
JAVA_HOME:jdk 的门路(jdk 下载网址:http://www.oracle.com)
Path: 要把 jdk 的目录门路,增加到 path 变量
java 的运行工作原理
java 源代码文件(.java)–>java 字节码文件(.class)–> 运行后果
.java–>.class: 编译期(通过 javac 命令将 java 的源文件编译为字节码文件)
.class–> 运行后果:运行期(先启动 java 虚拟机,不同的操作系统有不同的 jvm, 因而 java 跨平台, 再通过 JVM 加载.class 字节码文件,并加载 main 办法执行程序)
jdk jre jvm 的关系
jdk(开发工具包):Java Development Kit 是针对 java 开发员的产品,是整个 Java 的外围,包含了 Java 运行环境 JRE,java 工具和 java 根底类库。
jre(运行环境):Java Runtime Envirment Kit 是针对运行 JAVA 的运行环境,蕴含 JVM 和 java 的外围类库。
jvm(Java 虚拟机):java Virtual Machine,java 虚拟机的缩写,是整个 java 实现跨平台的最外围的局部,可能运行以 java 语言写作的软件程序。
jdk 有不同零碎的版本,所以 jdk 是跨平台的
java 的一次编写, 处处执行是怎么实现的?
java 程序会被编译成字节码组成的 class 文件, 这些字节码能够运行在任何平台, 因而 java 是平台独立的.
标识符
由字母, 数字, 下划线 (_),$ 组成, 不能有空格和其余字符, 以及不能呈现关键字.
不能由数字结尾
严格辨别大小写
见名知意
八种数据根本类型
byte(1),short(2),int(4),long(8),float(4),double(8),char(2),boolean(1)
练习 1(输出个人信息):
public class Test1{public static void main(String[] args){System.out.println("姓名:");
String name = new Scanner(System.in).nextLine();
System.out.println("性别:");
String sex = new Scanner(System.in).nextLine();
System.out.println("年纪:");
int age = new Scanner(System.in).nextInt();
System.out.println("您输出的个人信息是:");
System.out.println("姓名:");
System.out.println("性别:");
System.out.println("年纪:");
}
}
练习 2(圆的面积):
public class Test2{System.out.println("请输出圆的半径:");
double r = new Scanner(System.in).nextDouble();
System.out.println(3.14*r*r);
}
练习 3(变量的替换):
public class Test3{System.out.println("请输出变量 a:");
int a = new Scanner(System.in).nextInt();
System.out.println("请输出变量 b:");
int b = new Scanner(System.in).nextInt();
int t = a;
a = b;
b = t;
System.out.println(a);
System.out.println(b);
}
援用类型
援用类型是一个对象类型, 其值是指向内存空间的援用, 就是地址.
根本类型字面值规定
整数字面值是 int(4)类型, 如果值超出 int 范畴, 则须要做转型解决.
byte(1),short(2),char(2)三种比 int 小的整数, 在本身范畴内能够间接赋值.
浮点数字面值时 double; 浮点数转成整数会间接舍弃小数点后 6 位.
字面值后缀:L,D,F
字面值前缀:二进制(0b);16 进制(0x);8 进制(0);char 类型 16 进制(u
根本类型的类型转换
计算结果的类型与运算中的最大类型保持一致
byte(1),short(2),char(2) 三种比 int 小的整数, 计算时会主动转为 int.
有 long 类型时, 都会转为 long 类型.
char 类型相加, 晋升为 int 类型.
整数运算溢出: 能够增加后缀;
浮点数运算不准确的解决办法:
1. 间接去除整数;
2. 四舍五入(Math.round());
3. 向上取整(Math.floor());
4. 向下取整(Math.ceil());
5.StringBuffer,StringBuilder
根本类型之间的转换
数字类型之间能够相互转换, 从小到大主动转换, 从大到小须要强制转型.
byte–>short–>int–>long
char–>int
int–>float/double/long
小转大: 隐式转换
int a = 9;
long b = a;
大转小: 显式转换
int x = 10;
byte b =(byte)x;
运算符
&: 短路与,a&b,a 与 b 同时为真时后果才为真, 有一个为 false 均为 false. 不论右边是什么后果都要继续执行左边
&&: 逻辑与, 有一个为假即为假, 不再持续判断, 右边是假, 左边疏忽不执行. 直接判断为真
|: 短路或,a|b,a 与 b 中有一个为真即为真, 不论右边是什么后果都要继续执行左边.
||: 逻辑或, 有一个为真即为真即为真, 不再持续判断. 右边是真, 左边疏忽不执行, 直接判断为真.
流程管制
switch:jdk1.7 之前只能判断 byte,short,char,int, 之后能够判断 string. 从成立的 case 无条件的穿透所有的 case 包含 default 直到完结, 或者是遇到 break, 如果所有的条件都不成立的话就执行 case.
switch(变量或表达式){
case1:
case2:
case3:
default;
}
练习 1: 数字匹配
public class Test{public static void main(String[] args){
int i = 3;
switch(i){
case1:
System.out.println("1");
break;
case2:
System.out.println("2");
break;
case3:
System.out.println("3");
break;
default:
System.out.println("default");
}
}
}
break: 中 断, 跳出循环
countine: 完结本轮循环进入下一轮循环
for 循环:
for(变量赋值; 执行条件; 变量批改){代码}
练习 1: 打印正方形
for(int i = 1;i<5;i++){for(int j=1l;j<5;j++){System.out.println("*");
}
System.out.println();}
练习 2: 打印倒三角
for(int i = 5;i>1;i--){for(int j = 0;j<i;j++){System.out.print("*");
}
System.out.print();}
练习 3: 打印 99 乘法表
public class Test3{public static void main(String[] args){test();
}
private static void test(){for(int i = 1;i<=9;i++){for(int j=1;j<=i;j++){System.out.println(i+"*"+j+"="+i*j+" ");
}
System.out.println();}
}
}
if 分支
单分支:
if(判断条件){代码}
多分支:
if(判断条件){代码 1}else{代码 2}
嵌套分支:
if(判断条件 1){代码 1}else if(判断条件 2){代码 2}else if{判断条件 3}{代码 3}else{代码 4}
练习 1: 输出年号, 判断平年平年
public class Test1{public static void main(String[] args){System.out.println("年号:");
int y = new Scanner(Syetem.in).nextInt();
String r = "平年";
if(y%4==0){if(y%100!=0){r="平年";}
}
if(y%400==0){r="平年";}
}
练习 2: 商品打折
接管输出的原价, 满 1000 打 9 折, 满 2000 打 8 折, 满 5000 打 5 折.
public class test2{public static void main(String[] args){System.out.println("输出总原价");
double price = new Scanner(System.in).nextDouble();
double nowprice = f(price);
System.out.println(nowprice);
}
public static double f(double p){if(p>5000){p=p*0.5;}else if(p>2000){p=p*0.8;}else if(p>1000){p=p*0.9;}else{p=p;}
return p;
}
练习 3: 统计学员得分
>90: 优良
80-90: 良好
70-80: 中等
60-70: 及格
<60: 不及格
public class test3{public static void main(String[] args){double score = new Scanner(System.in).nextDouble();
if(score>=100||score<=0){System.out.println("请输出 0 -100 范畴内的数");
}
if(score>=90 && score<=100){System.out.println("优良");
}else if(score >= 80 && score<90){System.out.println("良好");
}else if(score >=70 && score<80){System.out.println("中等");
}else if(score >=60 && score<70){System.out.println("及格");
}else if(score < 60){System.out.println("不及格");
}
}
}
练习 4: 产生一个随机数, 和用户始终在输出的数字比拟.
public class test4{public static void main(String[] args){find();
}
private static void find(){int i = new Random().nextInt(100)+1;
System.out.println("请猜 1 -100 以内的数字:");
int a = new Scanner(System.in).nextInt();
while(true){if(a>i){System.out.println("猜大了");
}else if(a<i){System.out.println("猜小了");
}else{System.out.println("猜对了");
break;
}
}
}
}
变量
个别通过三局部来形容变量. 变量类型, 变量名, 变量值.
变量的应用准则: 就近准则.
局部变量
定义在办法里, 部分代码块中, 办法运行完内存就开释完了.
成员办法里
定义在类里办法外. 作用域是在整个类中, 类隐没了, 变量才开释.
public class Test1{
int a = 9;// 成员变量
{int x = 8;// 局部变量}
public static void main(String[] args){int sum = 10;// 局部变量}
}