《易途科技Java学习笔记(33页).doc》由会员分享,可在线阅读,更多相关《易途科技Java学习笔记(33页).doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-易途科技Java学习笔记-第 33 页Day01 Day02Java到底有哪些优势?1.跨平台(平台=OS) 可移植性在不同的操作系统之上可以不用做任何代码的修改直接使用a) 字节码文件:字节码文件不包括任何内存布局信息 与操作系统和硬件毫无关系 (Java的内存分布是在运行的时候才动态分配的)b) JVM:真正解释字节码文件内容并且和操作系统交互的部分 Sun(Oracle)已经给每一款操作系统都写好了现成的JVMJVM组成部分: 类加载器 ClassLoader字节码校验器 解释执行器 (翻译)逐行的解释执行代码2.安全 健壮3.面向对象面向过程:程序:函数+变量 (算法+数据结构)面向
2、对象:如:SmallTalk程序:对象和对象相互之间的“通讯”对象:属性和方法 类: 创建对象的模板 具有相同特征的一类事物的高度抽象集合概念对象是类的实例化,类是对象的抽象化。引用 4.动态更新5.简单!没有指针和相关的内存操作 new内存操作gc内存回收清理 Java中的回收机制:零引用回收问题:System.gc();Runtime.getRuntime().gc();调用gc的下一行是否回收?不一定6.免费 开源 搭建Java开发平台1.JDK (JavaSDK java开发工具包) SDK(软件开发工具包)JDK安装JDK 1.5 5.0 猛虎JDK 1.6 6.0 野马JDK 1.
3、7 7.0 海豚JDK JRE JVMJDK Java开发工具包JRE Java运行环境JVM Java虚拟机JDK = JRE + 常用工具JRE = JVM + 核心类库JVM = 三部分2.设置环境变量我的电脑-属性-高级-环境变量为了使开发过程变得更加简单快捷(问题:搭载Java开发平台最少设置几个环境变量?零个。为了方便,不是必要。)环境变量名字给谁用做什么用PATH操作系统更快的找到程序CLASSPATHJVM(类加载器)找到字节码文件JAVA_HOME其他Java程序找到JDKa) PATH就是为了在任何一个目录下都可以直接访问bin目录下的工具(命令)C:Program Fil
4、esJavajdk1.6.0_06binb) CLASSPATH默认值: . (当前目录)c) JAVA_HOME 设置到JDK安装目录下JAVA_HOME:JDK安装目录下CLASSPATH:.PATH:%JAVA_HOME%bin*环境变量名字最好全部大写*在CMD设置环境变量时=左右两边不要加空格*在CMD中定义任意程序环境变量:如:set PATH=E:TTPlayer同时定义两个环境变量中间加分号,或者Set PATH=%PATH%;E:TTPlayer分号后面不能加空格3.Java运行过程:编译期:Java源文件.java编译为字节码文件.class运行期:JVM -OS硬件编写代
5、码HelloWorld如何编译java程序javac 源文件的名字.java如何运行java程序java 类名(没有扩展名)HelloWorld.java代码:public class HelloWorldpublic static void main(String args)System.out.println(Hello!);public修饰符 modifier static修饰符 静态(不用通过对象调用)void方法返回值(表示这个方法不需要返回值)main标识符标识符 Identifier1.必须是英文 _ $ 中文开头2.不能使用有特殊意义的名字(关键字)类名(接口名):每个单词首字
6、母大写属性名和方法名:首字母小写,之后每个单词首字母大写包名:全部小写The most common relationships between classes are Dependence (“usesa”) Aggregation (“hasa”) Inheritance (“isa”)类成员:类可以拥有三种成员:字段:它们是类及其对象相关联的数据变量,保存着类或者对象的状态。方法:它们包含类的可执行代码并定义了对象的行为嵌套类(nested class)与嵌套接口(nested interface):它们是在其他的类或接口声明的内部声明的类与接口。类修饰符:注解(annotation)p
7、ublic :任何人都可以声明对这种类的对象的引用,或者访问这种类的公共成员。abstract:抽象类,被认为是不完整的,所以我们不能创建抽象类的实例。通常这是因为抽象类包含abstract方法,这些方法必须在子类中实现。final:final类不允许拥有子类。类不能既是final的又是abstract的。严格浮点(strict floating point): 声明为strictfp的类要求类中的所有浮点运算都是精确运算Java当中的包(对应操作系统当中的目录)1.区分不同的命名空间2.对多个.class文件进行分类的归类编译语句:javac -d . HelloWorld.java-d 自
8、动创建源文件当中指定的包结构. 在当前目录下创建目录结构运行语句: java 包名.类名通过包名和类名来唯一确认一个类打包语句:package导包语句:import例:打包,源文件Student.java放在桌面,为了能够运行,定义主方法mainpackage iii.ii;public class Studentpublic static void main(String args)System.out.println(Hello!);编译:打开CMD,输入“cd 桌面”转到当前目录,编译语句: javac d . Student.java运行:java iii.ii.Student(通过包
9、名+类名唯一确定一个类)例:导包,先写一个打包文件:package iii.ii;public class Studentpublic static void SayHello()System.out.println(Hello!);编译:javac d . Student.java然后写导包文件:import iii.ii.Student;public class Hellopublic static void main(String args)Student.SayHello();编译:javac Hello.java运行:java Hello生成帮助文档的常用工具 javadoc 语句:
10、javadoc -d doc 源文件的名字.javaJava注释:单行注释/多行注释/* */文档注释/* */生成jar包jar包就是java当中可执行的压缩归档文件1.可执行2.压缩3.归档 一个java程序可能涉及到很多个.class 把它们都归纳在一起 变成一个文件生成jar包语句:jar cvf 名字.jar 要放进压缩文件里的文件c 创建新的归档文件v 标准输出设备显示详细列表信息f 指定归档文件的名字生成可执行Jar包具体步骤:1 写.java文件如,写一个无限弹出计算器的代码public class Testpublic static void main (String arg
11、s)throws Exceptionwhile(true) Runtime.getRuntime().exec(calc);2 编译.java生成.classjavac Test.java3 将class文件打到jar包当中jar cvf name.jar Test.class4 修改jar当中的清单文件,在第三行加入Main-Class: Test注意:Test前面有空格(终止程序的方法:在CMD中输入tskill javaw)变量编程语言当中肯定要定义很多很多的变量来存储数据变量分类:1.定义在类体当中的变量成员变量 实例变量public class HelloWorldint i =10
12、0;/成员变量 属性 HelloWorld类型的对象都有一份的属性public static void main(String args)System.out.println(i);组成类的对象的属性依靠对象来存在的 它是对象存储空间当中的一部分实例变量使用前不用初始化2.定义在方法体中的变量局部变量在自己所在的方法体当中可以使用 出方法体 消亡局部变量使用之前一定要初始化*局部变量和成员变量是可以重名的!在局部变量所在的方法体中直接出现变量名将代表局部变量public class TestStudentpublic static void main(String args)Student s
13、tu = new Student();stu.setAge(25);System.out.println(stu.age);class Studentint age;String name;public void setAge(int age)/stu.age = 25;this.age = age;/实例变量和局部变量出现重名的时候,如果不写this.则这句没有意义,打印age的默认值0数据类型1.基本数据类型 primitive types8种booleancharbyteshortintlongfloatdoubleFloating-point numbers without an F
14、suffix (such as 3.402) are always considered to be of type double.If you want to round a floating-point number to the nearest integer (which is the more useful operation in most cases), use the Math.round method:double x = 9.997;int nx = (int) Math.round(x);Now the variable nx has the value 10.1.boo
15、lean布尔型true / false2.char字符型3.整数型 (符号位 数值位)byte8位 -128 127short16 - 215 215 -1int32 *long64 即-2 (n-1) 2(n-1)-14.浮点型 (符号位 幂指位 数值位)float32位 double64位 *2.引用数据类型(自定义类型 对象类型)无数种byte short (char) int long float double自动提升(就近提升)强制类型转换这种类型提升的规则,对于方法参数匹配同样适用public class Testpublic static void main(String arg
16、s)boolean flag = true;System.out.println(flag);char c1 = 中;char c2 = 97;char c3 = u0000;char c4 = t;byte b1 = 1;byte b2 = 2;byte b3 = (byte)(b1+b2);/int类型 强制类型转换int i1 = 45;int i2 = 031;/8进制int i3 = 0x31; /16进制long l1 = 1;long l2 = 1L;float f1 = 0.1F;double d1 = 0.1D;public class TestDataTypepublic
17、static void main(String args)int i=10;get(i);public static void get(byte a)System.out.println(我是byte型);public static void get(long b)System.out.println(我是long型);public static void get(double c)System.out.println(我是double型);运行结果:我是long型 (方法参数匹配就近提升)public class DataTypepublic static void main(String
18、args)int i=10;long d=get(i);System.out.println(d); /打印long类型的20public static int get(double a)return (int)a;public static int get(byte b)return b;public static int get(float c)return (int)c*2; /自动就近提升,所以调用这个方法,因为返回值为int型,所以代码中要强制类型转换short a = 1;a = a + 1;编译错误,a+1运算结果是int型,需要强制转换类型short a = 1; a += 1
19、;可以正确编译public class TestArgumentspublic static void main(String args)byte i = 1;get(i);/方法的调用public static void get(short d)/方法的定义,方法的参数作为局部变量/short d = i;如果再写这句就重复定义System.out.println(d);public class TestArgspublic static void main(String args)Car benz = new Car();benz.number = 99999;changeNumber(b
20、enz);System.out.println(benz.number);public static void changeNumber(Car car)/Car car = benz;/Java当中只有值传递car.number = 88888;class Carint number;画图:运行结果:88888public class TestExecpublic static void main(String args)IntA ia = new IntA();ia.i = 55;change(ia);System.out.println(ia.i);public static void
21、change(IntA ib)/IntA ib = ia;ib = new IntA();/如果去掉这句则同上一个例子,运行结果为99ib.i = 99;class IntAint i;画图:运行结果:55public class Execprivate static int j = 0;private static boolean methodB(int k)j += k;/j=4;return true;public static void methodA(int i)/int i = 0;boolean b;b = i 10 | methodB(4);/逻辑非短路b = i = =100
22、0); / 编程语言当中 = 赋值运算符 = 判断是否相等,打印false/*逻辑非短路运算符:& | 逻辑短路运算符: & |*/System.out.println( i2000 & i=10 | +m3);System.out.println(m);/打印11/*instanceof格式:一个引用 instanceof 一个类左边引用所指向的对象是否是右边类型的一个实例System.out.println(stu instanceof Student);*/*1 ? 2 : 3 三目运算符*/int ii = 5;System.out.println(ii10 ? 100.0 : 100
23、0);/自动提升为三个数值中的最大类型,这里打印1000.0TestOperator.absolute(3);public static void absolute(int number)System.out.println( number=0 ? number : -number );运算符优先级转义字符Day03流程控制分支:if elseelse与最近的if构成一组switch case循环:forwhiledo while循环标签:break continuepublic class TestSwitchCasepublic static void main(String args)i
24、nt i = 5;switch(i)/byte short char int 不能在括号里定义icase 1:System.out.println(i是1);break;case 2:System.out.println(i是2);break;case 3:System.out.println(i是3);break;case 4:System.out.println(i是4);break;default:System.out.println(i不是1234);break;public class TestForpublic static void main(String args)/程序当中相
25、邻的相似的代码肯定可以简化/打印1到20之间所有的偶数for(int i = 1; i 0 ; i-)System.out.println(i);System.out.println(i);/这句代码已经出for循环,for 循环上面必须定义i/*for循环是while循环的便捷形式*/i = 100;/ for 1while(i0)/for 2System.out.println(i);/for 4i-;/for 3public class TestDoWhilepublic static void main(String args)int i = 9;doSystem.out.printl
26、n(能看到我吗?); /无论条件是否成立 循环体首先要执行一次while(+i=10);public class TestBreakContinuepublic static void main(String args)for(int i = 10;i0;i-)if(i=3) /continue;/结束当次循环 直接开始下次循环break;/结束break所在的循环System.out.println(i);System.out.println(循环已经执行结束);/*打印1-100之间所有的质数(素数)*/public class TestZhiShupublic static void m
27、ain(String args)System.out.println(2);for(int i = 3;i=100;i+=2)if(checkNumber(i)System.out.println(i);public static boolean checkNumber(int number)if(number=1)return false;for(int i = 3; i=(number/2) ; i+=2)if(number%i = 0)return false;return true;public class ForExecpublic static void main(String a
28、rgs)outer:for(int i = 1;i6;i+)inner:for(int j = 1;j6;j+)if(i=3)break outer;System.out.println(i=+i+t j=+j);/*判定公历闰年遵循的规律为: 四年一闰,百年不闰,四百年再闰.公历闰年的简单计算方法:(符合以下条件之一的年份即为闰年)1.能被4整除而不能被100整除。(如2004年就是闰年,1900年不是)2.能被400整除。(如2000年是闰年)题目:判断年份是不是闰年,有三次输入机会*/import java.util.Scanner; /扫描仪public class TestLeapY
29、earpublic static void main(String args)int i=0;while(i+3)switch(i)case 1:System.out.println(我是灯神,给你三次机会,请输入你要判定的年份:);break;case 2:System.out.println(哈哈,你还有两次机会,说出你要判断的年份:);break;case 3:System.out.println(你还有最后的机会,输入你要判断的年份吧:);Scanner sc=new Scanner(System.in); /从标准输入设备建立一个扫描仪int year=sc.nextInt(); /
30、从扫描仪得到一个整数if(year%100!=0&year%4=0)|year%400=0)System.out.println(神灯显灵吧!答案是:This year is a leap year!n);elseSystem.out.println(神灯显灵吧!答案是:This year is not a leap year!n);使用Scanner需要先导包:import java.util.*;Whenever you use a class that is not defined in the basic java.lang package, you need to use an im
31、port directive.注意:Comparable属于java.langComparator属于java.util (使用前import) public class TestNinepublic static void main(String args)outer:for(int i=1;i=9;i+)inner:for(int j=1;j=9;j+)System.out.print(j+i+=+(i*j)+t);if(j=i)System.out.println();continue outer;/或者用break;Day04 数组import java.util.*;public c
32、lass TestMay162public static void main(String args)/Java当中的数组 存储空间等大而且连续/数组和它存放什么类型的数据没有任何关系 数组就是引用类型的int a=new int5; /可以通过for循环初始化数组或者遍历数组;数组的length属性 标示它当中有几个存储空间for(int i=0;ia.length;i+)ai=i;System.out.println(ai);/可以用 foreach循环 遍历数组中每个元素for(float i:a)System.out.println(i);/创建匿名数组,可以直接给已有数组重新初始化a
33、=new int18,11,12,16,14;/数组排序Arrays.sort(a); for(int i:a)System.out.println(i);/数组的复制/手动复制数组int e=new inta.length; for(int i=0;ia.length;i+)ei=ai; /通过Object的克隆方法int c=a.clone();/通过java.util.Arrays类中的copyOf方法int b=Arrays.copyOf(a,a.length); /通过System类当中的arraycopy方法int d=new inta.length; System.arrayco
34、py(a,0,d,0,a.length);/*arraycopy(1,2,3,4,5)1.源数组2.源数组开始复制的下标3.目标数组4.目标数组第几个开始放新的值5.一共放多少个*/public class TestObjectArraypublic static void main(String args)/引用类型的数组 初始化数组并不等于初始化当中的元素/数组被初始化了 数组当中的元素(学生对象)还没被初始化Student et0903 = new Student5;for(int i = 0;iet0903.length; i+)et0903i = new Student();/for
35、循环 数组当中的元素 学生对象 已经完成了初始化工作class Studentint age;String name;public void study()System.out.println(name+好好学习,天天向上);上例图示:利用数组解决四个问题:1. 已经知道:有一对熊猫 团团圆圆 ,三个月之后生下一对小熊猫之后每个月生下一对熊猫,小熊猫满三个月之后,每个月生一对儿小熊猫问:第23个月 熊猫总共多少只?分析:每个月小熊猫的对数关系为1 1 2 3 5 8 13 21 .public class Pandapublic static void main(String args)int
36、 iset=new int23;iset0=1;iset1=1;for(int i=2;iiset.length;i+)iseti=iseti-2+iseti-1;System.out.println(iset22);2. 已经知道:100个房间,每个房间里有一盏灯(不亮) 现在有一百个人排成一队第一个人拉所有能把1整除的房间里的灯第二个人拉所有能把2整除的房间里的灯第100个人拉所有能把100整除的房间里的灯问:最后哪些灯是亮的(考虑实现效率!)public class TestLightpublic static void main(String args)Light room=new Light100;for(int i=0;i100;i+)roomi=new Light();for(int human=1;human=100;human+)for(int number=1;number=100;number+)if(number%human=0)roomnumber-1.pull();for(int i=0;i100;i+)if(roomi.isOn)System.out.println(第+(i+1)+个房间的灯是亮的);class Lightboole