JDK 又叫J2SDK,它是有很多用于开发和测试Java程序的许多单独程序组成,每个程序由命令行激活。在JDK中,有两个重要的程序javac.exe和java.exe
javac.exe是Java语言编译器,用来将java源程序编译成Java字节码 javac HelloWorld.java(多Java文件时执行的是带有main函数的Java文件)
java.exe是语言解释器,用来执行Java字节码得到结果。 java HelloWorld (Java解释器会自动添加class后缀)
当安装了JDK之后,在编译和运行Java程序时,需要有两个环境变量设置:path 和classpath。
path用来设置命令文件搜索的路径如javac.exe,java.exe
classpath用来设置用户类文件搜索的路径。
如JDK安装在C:\Program Files\Java\jdk1.7.0_01中,而源文件以及编译生成的目标文件在D:\mycode中
则在MS-DOS方式下设置如下:
D:\>set path = .; C:\Program Files\Java\jdk1.7.0_01\bin
D:\>set classpath =.;D:\mycode
在WindowXP等环境中,在我的电脑的属性中选择高级选项卡,在环境变量按钮下的系统变量下编辑path和classpath.
根据Java平台的集成方式的不同,包括三种不同的方式:
J2ME Java 2 Micro Edition 用于嵌入式应用的Java2平台 主要是为机顶盒 移动电话 PDA等嵌入式消费设备提供支持的
J2SE Java 2 Standard Edition 用于工作站,PC机的Java2标准平台 主要是桌面应用软件的编程
J2EE Java 2 Enterprise Edition 可扩展的企业级应用的Java2平台 主要用于分布式的网络程序的开发,如电子商务网站 ERP系统的开发
Java程序分为两种:Java Application 和Java Applet ,Java Application可以独立运行,Java Applet 嵌入到支持Java的浏览器中运行
数据类型
数据类型分为两类:基本数据类型和复合数据类型
复合数据类型是建立在基本数据类型的基础上,包括数组 类和接口,另外,Java语言中不支持C/C++中的指针类型 结构类型 联合类型 和枚举类型
布尔类型boolean
一个boolean类型的变量或者表达式只能取true或者false
在Java语言中,布尔类型的值不能转换成任何数据类型,true常量不等于1,false不等于0 不同于C语言中的逻辑值
转义序列
\r回车符 将光标移到当前行的开头
\n 换行符 将光标移动到下一行
\t制表符 将当前光标移动到下一制表符 ,一制表为8个空格
模运算符
取模运算%在Java中不仅可以应用于整数类型,而且还可以运用于浮点类型,这不同于C/C++,在C/C++中模运算仅仅用于整数类型
如24%7等于3 42.4%10等于2.4 实数a与b的模运算值为a-(int)(a/b)*b a的符号决定了余数的符号
super和this的区别:
super关键字
1.在继承关系中,子类构造函数中通过super()调用父类的构造函数,super()的位置要在子类构造函数的第一行。在子类的构造函数中,如果没有明确的使用super关键字的话,会自动调用超类中的默认构造函数。(默认构造函数:没有显式提供初始化式时调用的构造函数。它由没有参数的构造函数和有参数,每个参数都提供默认值的构造函数两种形式组成)
2第二种类似与this的作用,通过super.XXX()调用在从父类中继承过来的被子类隐藏的同名的成员变量或者方法的情况
this关键字
有时类的实例变量名和一个方法中的参数名相同,此时参数就会隐藏实例变量名,这种情况下,为了访问隐藏的实例变量,采用this.如果是隐藏的静态变量时可以简单的使用类名.变量名
总结:注意使用环境,super使用在继承关系中,而this使用在形参隐藏实例变量时。
方法重载和方法重写:
方法重载: 在一个类中方法名字相同,但是参数类型或者参数个数不同,,这个过程被称为方法重载。方法重载也是Java实现多态性的方法之一
方法重写 :在继承中,子类对于超类中的方法保持方法名字,参数和返回值类型都一样,但是重写了方法体,使子类和超类完成不同的工作。方法重写也是实现多态性的方法之一。
超类中的方法并不是任何情况下都是可以重写的。仅当实例方法是可以访问的,他才可以被重写,因此,私有的方法不能被重写,因为他不能被外部类所访问。
如果定义在超类中的方法,在子类中该方法是私有的,那么这两个方法是完全没有关系的、
静态方法可以被继承,但是不能被重写。当定义在超类中的静态方法被重新定义在子类中的话,那么定义在超类中的方法被隐藏。
abstract抽象类
abstract 说明符只能用于普通方法,不用用于static方法或者构造函数,抽象类的子类必须实现抽象类的抽象方法或者将自身类也声明为抽象类。
final修饰符
final有以下三个用处:
1.被final修饰的变量其实等价于常量
2. 被final修饰的方法不能被重写 被final修饰的成员函数就是向编译器发出内联的建议,如C++的inline使用原则一样,所以不要过多的将成员函数声明为final
3.被final修饰的类不能被继承
Object类
Java中每个类都是从java.lang.Object类中继承,类被定义后,如果没有指定继承,那么类的超类就是Object。Object类是Java中的一个特殊类,他是所有类的一个隐形超类。
其他所有类都是Object的子类。这就意味着Object类型的引用变量可以引用任何类的对象,而且因为数组是作为一个类来实现的,所以Object类型的变量也可以引用任何数组。
Object中定义的方法:
clone方法
newObject = someObject 本句不会创建对象的副本,而是简单地将someObject的引用赋给newObject,为了能够创建含有单独的内存空间的新对象,就可以使用clone方法。
newObject = someObject.clone();本语句将someObject复制到新的内存地址,并且将新的对象引用赋给newObject。
另外,在Java中,数组被当做对象,并且是Object类的实例,clone方法还可以来复制数组。
int[] targetArray = (int[])sourArray.clone();
需要说明一点,并不是所有的对象都可以被复制,如果对象是可以被复制的,那么他的类必须能够执行java.lang.Cloneable接口。
equal方法
用来测试两个对象是否相等。
比较运算符和equal方法的区别:
比较运算符被用来比较两个原始数据类型值,或者确定两个对象是否有相同的引用,而equal方法用来测试两个对象是否具有相同的内容。
finalize方法,在垃圾回收前调用
hashCode()返回与调用对象相关的哈希代码
toString()返回描述对象的字符串
wait()方法 等待另一个线程的执行
notify()继续执行等待调用对象的线程
接口
接口虽然是抽象类,不能创建实例对象,但是接口也是一个类,也是创建了一个新的类型,所以在Java中,可以声明接口类型的引用变量。
接口定义
access interface name
{
return-type method-name (param-list);
}
access只能是public或者default 。
注意定义的方法都没有方法体,他们以参数列表后面的分号结束,他们本质上都是抽象方法,在接口中指定的方法都没有默认实现,每个包含接口的类必须实现所有的方法。
在接口中声明的变量都不是是实例变量,一般是final 和static 的,访问修饰符只能是public 或者default,这个取决于接口中的access是什么。
接口实现
使用implements子句。
接口的扩展
接口可以extends来实现扩展
接口中的变量
在接口中可以声明变量,但是变量是隐式声明为static final的,主要用处可以将程序中所有的常量放在接口中,这样就可以使这些常量适用于每个文件
访问修饰符
public
private 只可以在本类中使用
default 在同一个包中可以使用
protected 在同一个包中和在父类的子类中可以使用