环境配置
JAVA_HOME:jdk的路径(jdk下载网址:http://www.oracle.com)
Path:要把jdk的目录路径,添加到path变量java
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是跨平台的oracle
java的一次编写,到处执行是怎样实现的?
java程序会被编译成字节码组成的class文件,这些字节码能够运行在任何平台,所以java是平台独立的.dom
标识符
由字母,数字,下划线(_),$组成,不能有空格和其余字符,以及不能出现关键字.
不能由数字开头
严格区分大小写
见名知意jvm
八种数据基本类型
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进制(uui
基本类型的类型转换
计算结果的类型与运算中的最大类型保持一致
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/longcode
小转大:隐式转换 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; } } } }
三种循环的区别
for:知道循环次数
while/do...while:当循环次数不肯定时
while:先判断,再执行,不符合规则,不执行代码
do while:先执行,再判断。代码至少被执行一次。
方法
被命名的代码块,方法能够含参也能够不含参。
修饰符 返回值 方法名(参数){ 方法体; } public static void f(){ }
练习1: public class test1{ public static void main(String[] args){ f1(9); } private static void f1(int a){ return 10*a; } }
方法的重载
方法的重载是指在一个类中有多个同名的方法,但每一个方法都有不一样的参数(参数的类型,个数,顺序不一样)。程序在调用方法时,能够经过传递不一样个数和类型的参数和决定具体使用哪个方法。
练习: public class test{ public static void main(String[] args){ int a = 3; int b = 9; String name = "jack"; f1(); f2(a); f3(a,b,name); } private static void f1(){ return 0; } private static void f2(int a){ return a*a; } private static void f3(int a,int b,String name){ return a+b+name; } }
数组
数组Array是用于存储多个相同类型的数据的集合。想要获取数组中的元素,能够经过元素的下标来获取,下标是从0开始的。
建立数组:
动态初始化:int[] a = new int[5]; 静态初始化:int[] b = new int[]{1,2,3,4,5}; int[] c = {2,3,4,5,6};
练习1: public class Test1(){ public static void main(String[] args){ f1(); } private static void f1(){ //静态初始化建立数组 int[] i = new int[]{1,2,3,4,5}; System.out.println(Arrays.toString(i)); //动态初始化建立数组 char[] j = new char[4]; j[0] = "c"; j[1] = "h"; j[2] = "a"; j[3] = "r"; System.out.println(Arrays.toString(j)); } //获取数组的长度 System.out.println(j.length); }
练习2:建立随机数组 public class Test2{ public static void main(Stirng[] args){ f(); } private static void f(){ int[] a = new int[5]; for(int i = 0;i < a.length;i++){ a[i] = new Random().nextInt(100)+1; } System.out.println(Arrays.toString(a)); } }
数组工具类Arrays
Arrays.toString(数组):将数组链接成字符串
Arrays.sort(数组):数组排序
Arrays.copyOf(数组,新的长度)复制数组长度为一个指定长度的新数组。
System.arraycopy(原数组,原数组起始位置,目标数组,目标数组起始位置,复制的数量):不会建立新的数组,可是目标数组要事先存在。
Arrays.binarySearch(数组,目标值):二分法查找,在有序数组中查找目标值下标。
冒泡排序
相邻位置比较,从小到大排序,若是小就往前换,i表明从头至尾遍历数据。
升序: public class Test1{ public static void main(String[] args){ int[] arr = new int[]{31,23,43,65,17,89,54,76}; int[] arrnew = f1(arr); System.out.println(Arrays.toString(arrnew)); } public static int[] f1(int[] a){ //外循环控制比较次数 for(int i = 0;i<a.length-1;i++){ //内循环控制比较大小,循环次数和外循环同样 for(int j = 0;j<a.length-1;j++){ if(a[j]>a[j+1]){ int t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } return a; } } 降序: public class Test2{ public static void main(String[] args){ // f1(); int[] arr = new int[] {1,2,4,2,1,8,9,3,2,4}; int[] newarr = f2(arr); System.out.println(Arrays.toString(newarr)); } private static int[] f2(int[] arr) { //外循环控制次数 for(int i = 0;i<arr.length-1;i++) { //内循环控制大小 for(int j = 0;j<arr.length-1;j++) { if(arr[j]<arr[j+1]) { int t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t; } } } return arr; }
变量
通常经过三部分来描述变量.变量类型,变量名,变量值.
变量的使用原则:就近原则.
局部变量
定义在方法里,局部代码块中,方法运行完内存就释放完了.
成员方法里
定义在类里方法外.做用域是在整个类中,类消失了,变量才释放.
public class Test1{ int a = 9;//成员变量 { int x = 8;//局部变量 } public static void main(String[] args){ int sum = 10;//局部变量 } }