第1章Java概述Java语言的特特点一种面向对象的语言;一种平台无关的语言;一种健壮的语言,吸收了C/C++的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)Java的两种核心机制Java虚拟机(JavaVirtualMachine)垃圾回收机制(GarbageCollection)源程序(*.java文件)→Java编译器→字节码(*.class文件)→类装载器→字节码校验器→解释器→操作系统平台一次编译,随处运行Java是一种解释型语言JDK(JavaDevelopmentKit)软件开发工具包JRE(JavaRuntimeEnvironment)运行时环境开发需要JDK;用户只需JREPATH:WINDOWS系统执行命令时要搜寻的路径(如javac.exe,java.exe)CLASSPATH:Java在编译和运行时要找的class所在路径(“.”代表当前路径)java:运行java程序javac:编译java程序java–version一个源文件最多只能有一个public类,其他类数量不限,源文件名必须与public类名一致Java应用程序的执行入口时main()方法:publicstaticvoidmain(String[]args){…}Java语言中严格区分大小写编译后,每一个类都对应一个class文件第2章基础语法标示符由字母、下划线”_”、美元符”$”或数字组成标示符应以字母、下划线、美元符开头Java标示符对大小写敏感,长度无限制,注意“见名知意”且不能与Java语言关键字重名abstractdefaultifprivatethisbooleandoimplementsprotectedthrowbreakdoubleimportpublicthrowsbyteelseinstanceofreturntransientcaseextendsintshorttrycatchfinalinterfacestaticvoidcharfinallylongstrctfpvolatileclassfloatnativesuperwhileconstfornewswitchnullcontinuegotopackagesynchronizedgoto和const虽然未使用,但也被作为Java的关键字保留程序执行过程:程序1.load到内存区2.找到main方法开始执行3.执行过程中的内存管理Java数据类型的划分boolean类型数据只允许取值true或false,不可以使用0或非0的整数值取代true和false,这点和c语言不同Java字符采用Unicode编码,每个字符占两个字节,因而可以用十六进制编码硬盘程序内存代码操作系统代码heap堆new出来的东西stack栈局部变量datasegment静态变量字符串常量codesegment存放代码数据类型基本数据类型引用数据类型数值型字符型(char)布尔型(boolean)整数类型(byte、short、int、long浮点类型(float、double)类(class)数组接口(interface)形式表示,例:charc=‘\u0061’;Java语言的整型常量默认为int类型,声明long型常量可以后加l或L类型占用存储空间数值范围byte1字节-27~27-1short2字节-215~215-1int4字节-231~231-1long8字节-263~263-1Java浮点型常量默认为double型,声明float型需在数字后面加f或F类型占用存储空间数值范围float4字节-3.403E38~3.403E38double8字节-1.798E308~1.798E308基本数据类型转换boolean类型不可以转换为其他的数据类型整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:容量小的类型自动转换为容量大的类型:byte,short,char-int-long-float-doublebyte,short,char之间不需要相互转换,他们三者在计算时首先会转换为int类型可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超过其表数范围“+”除用于算术加法外,还可用于对字符串进行连接操作,“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接,当进行打印时,无论任何类型,都自动转换为字符串进行打印break&continuebreak语句用于终止某个语句块的执行。用在循环语句中,可以强行退出循环continue语句用在循环语句体中,用于终止某次循环过程,跳过循环体中continue语句下面未执行的循环,开始下一次循环过程switch小心case穿透,推荐使用break语句多个case可以合并到一起default可以省略,但不推荐java中switch语句只能探测int类型值方法形参、实参、返回值、返回值类型Java中进行函数调用中传递参数时,遵循值传递的原则:基本类型传递的是该数据值本身,引用类型传递的是对象的引用,而非对象本身递归调用递归调用指在方法执行过程中出现该方法本身的调用第3章面向对象编程类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量和方法,对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体,是该类的一个具体实例,在Java中“一切皆为对象”继承、组合、实现、多态类=成员变量+方法成员变量系统可以对其自动初始化,局部变量不初始化会报错引用Java语言中除基本类型之外的变量类型都称之为引用类型(基本类型占一块内存,引用类型占两块内存)Java中的对象时通过引用对其操作的类时静态的概念,代码区对象是new出来的,位于堆内存(动态分配内存用的),类的每个成员变量在不同的对象中都有不同的值(除了静态变量),而方法只有一份,执行的时候才占内存对象必须使用new关键字创建对象同一类的每个对象有不同的成员变量存储空间(除了静态变量)同一类的每个对象共享该类的方法非静态方法时针对每个对象进行调用的(必须创建对象)构造方法使用new+构造方法创建一个新的对象构造方法是定义在Java类中的一个用来初始化对象的函数构造方法与类同名且没有返回值当没有指定构造方法时,编译器为类自动添加形如类名(){}的构造方法命名规则类名的首字母大写变量名和方法名的首字母小写运用驼峰标识方法重载(overload)方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时根据不同的参数列表选择对应的方法this在类的方法定义中使用this关键字代表使用该类的对象的引用有时使用this可以处理方法中成员变量和方法参数重名的问题This可以看做是一个变量,它的值时当前对象的引用publicclassLeaf{intI=0;Leaf(inti){this.i=i};Leafincreament(){i++;returnthis;}voidprint(){System.out.println(“i=”+i);}publicstaticvoidmain(String[]args){Leafleaf=newLeaf(100);leaf.increament().increament().print();}}static在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员静态方法不再是针对某个对象调用,所以不能访问非静态成员可以通过对象引用或类名(不需要实例化)访问静态成员或方法package&import为了解决类的命名冲突问题,Java引入的包(package)机制,提供类的多重类命名空间package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包,裸体类)Java编译器把包对应于文件系统的目录管理,package语句中,用“.”来指明包(目录)的层次,例:packagecom.yao;则该文件中的类位于.\com\yao目录下如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.yao.MyClass),Java编译器才会找到该类也可以使用import在文件的开头引入要使用的类,例:importcom.yao.MyClass可以不需要用import语句直接使用java.lang包中的类访问位于同一个包中的类不需要引入class文件的最上层包的父目录必须位于classpath下JDK中主要的包介绍java.lang-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能,使用时不需要引入(lang-language)java.awt-包含了构成抽象窗口工具集(abstractwindowtoolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)java.applet-包含了applet运行所需的一些类java.net-包含了与网络相关的操作的类java.io-包含能提供多种输入/输出功能的类java.util-包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数java运行时所需的类位于jdk\jre\lib\rt.jar打jar包,定位到需要打包的最上层的父路径jar–cvfxxx.jar*.*(*.*指目录中所有文件夹打包)jar包也可设为classpath变量继承extends通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)(包括private成员,拥有私有变量的所有权,但无使用权)Java只支持单继承,不允许多继承,一个子类只能有一个基类,一个基类可以派生多个子类访问控制权限修饰符public、protected、private、default(包访问权限)修饰符类内部同一个包子类任何地方private√XXXdefault√√XXprotected√√√Xpublic√√√√对于class的权限修饰符只可以用public和defaultpublic类可以在任意地方被访问default类只可以被同一个包内的类访问方法重写overwrite/override在子类中可以根据需要对从基类中继承来的方法进行重写重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型重写方法不能使用比被重写方法更严格的访问权限super在Java类中使用super来引用基类的成分继承中的构造方法子类的构造过程中必须调用其基类的构造方法子类可以再自己的构造方法中使用super(argument_list)调用基类的构造方法使用this(argument_list)调用本类的另外的构造方法如果调用super,必须写在子类构造方法的第一行如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用调用基类无参数的构造方法如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错Object类Object类是所有Java类的根基类如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类publicclassPerson{…}等价于:publicclassPersonextendsObject{…}toString()Object类中定义有publicStringtoString()方法,其返回值时String类型,描述当前对象的有关信息,返回一个字符串,该字符串由类名(对象是该类的一个实例)+“@”+此对象哈希码的无符号十六进制表示组成,即getClass().getName()+‘@’+Integer.toHexString(hashCo