1995年MicroSystems公司
安装JDK后产生如下目录:
\bin目录:Java开发工具,包括Java编译器、解释器等
\demo目录:一些实例程序
\lib目录:Java开发类库
\jre目录:Java运行环境,包括Java虚拟机、运行类库等
JDK常用工具:
Javac:
Java编译器,用来将javaBytecode。
Java:
Java解释器,执行已经转换成Bytecode的java应用程序。
Jdb:
Java调试器, 用来调试java程序。
设置环境变量:(有了集成开发环境,现已不再使用)
<INSTALL_DIR>\bin;
设置Java的Path,目的是让Java程序设计者在任何环境都可以运行SDK\bin目录下的工具文件,如:javac,java, javadoc等
CLASSPATH= . ; <Other_Applications_Dir>;
设置classpath的目的是让Java虚拟机找到所需要的类库
体现Java的跨平台特性
Java语言特点
Java语言简单
Java 是一种面向对象的语言。和C++类似,具有面向对象的基本特征。
平台无关性 (Write Once, Run Anywhere)
Java既是编译型语言.class,也是解释性语言.Java
Java 是分布式
Java是安全和可靠的
编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。
Eclipse是一个开源,基于Java的开发环境(Integrated Development Environment) IDE, 是一个功能完整并成熟的软件,由IBM与2001年首次推出。Eclipse 是一个框架和一组被称为平台核心的服务程序,用于通过插件组建构建开发环境。
Java程序书写规范
;
io,awt;
类名第一个字母要大写: HelloWorldApp;
变量名第一个字母要小写: myName;方法名第一个字母要小写: setName;
类和对象
含义
{姓名,年龄},读者对象{"张三",18}
注意
classTV{ //电视机类 private int volume, channel; public void setCH(int n) { channel=n; } } TVt=new TV(); //创建对象
类描述了一组有相同特性(属性)和相同行为(方法)的对象。
对象是类的实例化
类与对象是面向对象思想的两个核心概念。
封装
封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。
作用
封装机制让用户操作对象更简单,让对象更安全、更易于维护、更易于重用。
隐藏细节,可简化认知;
封装,迫使用户按照设计者要求来使用对象;
借助对象使用接口来操控对象,更易于重用和维护
继承
含义:子类重用父类的全部属性和行为
继承是一种重用机制
作用
把类家族的特征分散于类家族的层次结构中,有效控制了单个类的规模。
多态
两种不同形式的多态
与静态绑定有关:
=new藏獒();
.嗅(主人气味欢快、愉悦的反应
.嗅(老虎气味充满警戒、敌意的反应
与动态绑定有关:
;
=new藏獒();哈利.护家();
=new哈巴狗();哈利.护家
面向过程
a.用自顶向下逐步求精策略指导开发过程;
b.程序由若干模块(或构件)组装而成;
c.构成模块的每一子程序只能包含顺序、分支、选择等三种结构,且每种结构只允许单入口和单出口。
面向对象
模拟,即软件系统是对现实系统的模拟。换言之,其思想“来源于生活,服务于生活”。
将数据(属性)与数据的操作(方法)打包成整体,对象以整体形式呈现。
生成一个对象格式如下:
classnameobjectname= new classname();
其作用是在内存里为对象分配内存空间。
对象的状态本质上等同于对象的值,任何程序的执行,其终极目标是处理数据。
构造方法的特点
n一种和类同名的特殊方法,可以有多个;
n用来完成对象的初始化工作;
n无返回类型,无修饰符void,通常被声明为公有的(public);
n可以有任意多个参数;
n不能在程序中显式的调用,在生成一个对象时,系统会自动调用该类的构造方法;
n如果没有写构造方法,系统会自动提供一个默认构造方法。
n但是如果有构造方法,系统就不会再提供默认构造方法。
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。
对象的内存管理
内存空间的自动管理模式:基于栈的内存管理
栈特征:后进先出
函数中定义的所有变量,无论是基本类型还是引用类型。
缺点:按照最大可能进行空间分配,导致空间利用低效。
内存空间的手动管理模式:基于堆的内存管理
特征:一种无结构的内存区域
程序给出申请或者释放内存单元的指令,可实现内存单元的按需分配或者释放
new是申请空间的指令
堆内存管理缺陷与Java解决策略
String s1=new String(“abc”); String s2=new String(“xyz”); S1=s2; //执行后字符串abc的对象成为内存垃圾,被泄露掉
对象清除
Java是通过垃圾搜集器自动回收无用的对象所占的内存。System.gc();
C++是通过析构函数
垃圾回收机制算法:
-清扫,分代式收集等
System.gc();Runtime.gc
不会立即执行,Java是多线程,只有到特定时间才释放内存
访问数据成员及方法
参数传递
参数的类型可以是基本数据类型,也可以是引用(类)类型。
Java语言中,基本数据类型作为参数均采用传值(的方式完成。
引用类型变量作为参数传递时,采用的是引用传递(passing-by-reference)的方式,在方法体中对形参的改动将会影响到实参。
对象输出
Java可以把对象像基本数据类型一样,使用System.out.println直接输出到屏幕。
System.out.println(ipad)语句就等价于System.out.println(ipad.toString())
实际上,Java的所有类都有一个默认的toString()
如果直接调用默认的toString(),返回结果形式为:
类的名字@对象的
重写toString()方法的实现部分,“覆盖”掉从Object继承来的toString(),将对象的内容转换为字符串
public class Product { int ID; String name; String categories; double productPrice; Product(int id, String nm, String categ,double price) { ID =id; name=nm; categories = categ; productPrice = price; } Product(){} public String toString(){ return ("Product "+ ID+","+ name + ","+categories+","+productPrice); } }
public class Sx { public static void main(String args[]){ Product iphone = new Product(); Product ipad = new Product(10,"ipad2","computer",5000); Product macbook = new Product(11,"apple","computer",9999); System.out.println(ipad); System.out.println(macbook); System.out.println(iphone); } }
对象创建clone
略
封装性:对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作与访问。
封装性实现机制
o限定了成员变量(属性)与方法(行为)的访问权限
oJava中声明类的成员变量与方法的语法如下:
[修饰符]public、protected、private
、final
类的定义格式如下:
[访问控制修饰符] [继承修饰符] classclassname
{
[访问控制修饰符][全局修饰符] [继承修饰符]成员变量描述对象的属性
classname()//构造函数
访问控制修饰符] [全局修饰 符] [类型修饰符]返回类型
成员方法()//描述对象的行为操作
}
成员变量的修饰符:
[访问控制修饰符][全局修饰符] [继承修饰符]成员变量
实例:
publicint
[访问控制修饰符
[全局修饰符
[继承修饰符
成员方法的修饰符:
访问控制修饰符] [全局修饰 符] [类型修饰符]成员方法()
实例:
publicstatic final int getAge(){ return age; }
[访问控制修饰符
[全局修饰符
[继承修饰符
类的修饰符:
[访问控制修饰符] [类型修饰符classclassname
}
实例:
public final class dog{ … }
[访问控制修饰符
[继承修饰符
o成员变量或方法所在的类及其子类,同一个包内的类,不同包中的类都可以访问。
o成员变量或方法所在的类及其子类,同一个包内的类可以访问。不同包中的类不能访问
o[只能在成员变量或方法所在的类中访问,其他都不能访问。
o
o所修饰的成员变量为静态变量(类变量),所修饰的方法为静态方法(类方法)。
特性:
1.只属于类,不属于任何实例,静态变量的值保存在类的内存中的公共存储单元中,而不是保存在某个对象所在的内存单元中。
2、可以只通过类名以及”.”
3、静态方法能访问静态的成员变量,也能调用静态的方法,但是不能访问非静态成员变量,也不能调用非静态方法。但是非静态成员方法能访问非静态成员变量,也能调用非静态方法,同时也能访问静态的成员变量和调用静态的方法
类的访问控制只有public(公共类)及包(默认类)两种,没有私有。
oΪfinal
修饰的成员
所修饰的成员方法不能被子类重写;
修饰的类不能被子类继承。
oΪabstract
修饰的成员方法必须由子类重写
修饰的类不能被实例化
this指针
每一个方法内都有一个特殊的指针,指向“调用该方法的当前对象”
this 关键字只能在方法内部使用
this指针的用法
对象,访问对象的数据。
返回值使用,当需要返回一个对象时,就可以在return语句里使用this。
构造方法。
包
Java允许把多个类收集在一起成为一组,称作包(package)。包便于组织任务,以及使自己的任务和其他人提供的代码库相分离
通俗来说“包”就是目录
每一个类都属于一个包
同一个包里的类可以相互调用
不同包里的类调用时需要import,导入语句必须放在文件首,格式如下:
mportpath.to.package.foo.Foo
path.to.package.foo.*;
基础类库
Java提供了用于语言开发的类库,称为Java基础类库(JFC,Java Foundational Class) ,也称应用程序编程接口(API,Application Programming Interface),分别放在不同的包中。
Java提供的常用包

面向对象的三个特征――封装、继承、多态
在现有类的基础上创建新类,在其中添加新代码,这种方法称为继承。
在新类中使用其他类的对象。即新类由多种类的对象组成,这种方法称为组合。
继承的语法
class childClassextendsparentClass { //类体 }
当创建一个类时,总是在继承,除非已明确指出从其他类中继承,否则就是隐式地从Java的根类Object进行继承。
通过继承,可以根据已有类来定义新类,新类拥有已有类的所有功能。
父类(super class)是所有子类(derived class)的公共属性及方法的集合,子类则是父类的特殊化。
Java只支持类的单继承,每个子类只能有一个直接父类。
父类(baseclass)
子类(derived-class)
继承所有祖先的状态和行为
子类可以增加变量和方法
子类也可以覆盖(override)继承的方法
继承特点
子类只继承父类中非private的数据成员。
子类只继承父类中非private的成员方法
子类不能直接访问从父类中继承私有属性及方法,但可使用公有(及保护)方法进行访问。
当子类中声明了与父类中相同的成员变量名,则从父类继承的变量将被隐藏。
子类的成员方法和父类的成员方法同名时,父类的成员方法被子类的成员方法覆盖(Override)。
重写
方法覆盖即指在子类中重新定义父类中已有的方法。
通过类的继承,子类可以修改,扩展从父类中继承的方法。
重写规则:
1.当父类中方法为final时,不能被重写
2.对于从父类继承的抽象方法,子类如果不是抽象类就必须重写该抽象方法。
3.当父类中方法为private时,子类不能使用父类该方法
4. 当父类中方法为public时,子类中的重写方法只能为public
原因:java中规定重写方法不能比被重写的方法有着更严格的访问权限。
重载
重载:同一个类中有两个或者以上的方法共享一个方法名,但是参数不同。
“重写”与“重载”是两个完全不同的概念
在一个类中允许重写、重载同时存在。
super关键字
可以用super来引用父类中的方法、变量及构造方法
super必须是子类构造方法的第一条语句
public void speedup() { super.speedup(); //通过Super关键字调用父类的speedup() speed = speed +10; System.out.println("So fast!, my speed is:"+speed+"now"); }
继承关系下的构造方法
子类不能继承父类的构造函数,只能通过super关键字在子类的构造函数中调用父类的构造函数。
Super函数必须为构造函数的第一条语句
在Java中每一个构造函数都必须调用父类的构造函数作为第1条语句,当子类的构造函数中没有明确的使用super关键字时,如果没有明确指明调用父类的构造方法,Java会自动插入对父类默认构造方法(无参的构造方法)的调用
this关键字
指向自己的对象,可以访问自己的属性与方法
(1)this调用本类中的属性与方法,也就是类中的成员变量与方法;
(2)this调用本类中的其他构造方法,调用时要放在构造方法的首行;
(3)this返回类对象的引用;
引用成员变量与方法
返回类的引用
public class Product { int ID; String name; String categories; double productPrice; Product increment() { i++; return this; } }
Java不支持多继承对象的类型转换
子类对象可以自动转换成父类
如果一个父类对象的引用指向子类的对象,那么该对象只能使用父类的成员变量与方法,而不能调用子类的新增的成员变量与方法。
instanceof
终结类与终结方法
被final修饰符修饰的类和方法
终结类不能被继承
终结方法不能被当前类的子类重写
抽象类和抽象方法
抽象类:用abstract关键字来修饰一个类时,该类叫做抽象类
抽象类不能创建对象;
它只能作为其它类的父类,这一点与final类正好相反。
抽象方法:用abstract来修饰一个方法时,该方法叫做抽象方法。
抽象方法必须被重写;
抽象方法只有声明,不能有实现;
含有抽象方法的类必然是抽象类。