1 Java为纯面向对象的语言
2 平台无关性(Window、Linux、Macos上都可以通过Jvm运行)
3 Java提供了很多内置的类库
4 提供了对WEB应用的支持
5 具有较好的安全性和健壮性
6 去除了C++中难以理解、容易混淆的特征
1 java为解释性语言,程序源代码经过编译生成字节码,然后由jvm解释执行;c/C++为编译语言,源代码经过编译和链接后生成可执行的二进制代码。所以java执行速度比C/C++慢,但是Java能够跨平台执行。
2 Java中所有代码必须在类中实现,除数据基本类型外,所有类型都是类。Java中没有全局变量或全局函数。
3 Java中没有指针的概念
4 Java不支持多重继承,所以引入了接口的概念。
5 Java中提供了垃圾回收器来实现垃圾饿自动回收,不需要程序显式地管理内存分配。Java中没有析构函数(C++中用于存放要释放资源的代码),但是引入了finalize()方法。
6 C++语言支持运算符重载,Java不支持。Java不支持自动强制类型转换,提供对注释文档的内建支持,提供用于访问数据库的JDBC库,用于实现分布式对象的RMI标准库等。
public 是允许任何类或对象都可以访问这个方法,static即该静态方法中的代码是存储子静态存储区的,只要类被加载后,就可以使用该方法而不需要实例化对象类访问。返回值必须为void。
虽然main方法是Java程序的入口,但是main()方法不一定是第一个被执行的模块。可以用静态块实现在main前的输出。
当实例化对象时,对象所在的类所有成员变量首先要进行初始化,才能调用对象所在类的构造函数创建对象。初始化原则:1静态对象优先于非静态对象(变量)初始化,其中静态变量只初始化一次,非静态对象可初始化多次;2 父类优先于子类进行初始化;3 按照成员变量和方法(包括构造函数)定义顺序进行初始化。
变量类型:成员变量、静态变量、局部变量。(静态变量不依赖于特定的实例,而是被所有实例所共享,可以直接通过类名和变量来访问静态变量)。public、private、protected(不能修饰类)、default。
也就是说实现这些接口不需要重写任何方法,这些没有任何方法声明的接口被叫做标识接口。充当一个标识的作用,用来表明实现它的类属于一个特定的类型(相当于汽车的标志图标)。Java类库中已存在标识接口有Clone able和Serializable等。使用时经常会用instanceof来判断实例对象的类型是否实现了一个给定的标识接口(即识别类型)。
Java在处理基本数据类型(int,char,double等)都是采用按值传递(传递的是输入参数的复制)的方式执行,除此之外其他类型都是按引用传递(传递的是对象的一个引用)的方式执行。对象除了在函数调用时是引用传递,在使用“=”赋值时也采用引用传递。
public classTestRef {
private Obj aObj=new Obj();
private int aInt=0;
public Obj getAObj(){
return aObj;
}
public int getAInt(){
return aInt;
}
public void changeObj(Obj inObj){
inObj.setStr("changed value");
}
public void changeInt(intinInt){
inInt=1;
}
public static voidmain(String[] args) {
TestRef oRef=new TestRef();
System.out.println("************引用类型***************");
System.out.println("调用changeObj()前:"+oRef.getAObj());
oRef.changeObj(oRef.getAObj());
System.out.println("调用changeObj()后:"+oRef.getAObj());
System.out.println("**********基本数据类型*****************");
System.out.println("调用changeInt()前:"+oRef.getAInt());
oRef.changeInt(oRef.getAInt());
System.out.println("调用changeInt()后:"+oRef.getAInt());
}
}
输出的结果:基本数据类型没有改变,还是0。这时候就用到了clone()方法,它的作用是返回一个Object对象的复制,这个复制的函数返回的是一个新的对象而不是引用。
public class Obj implementsCloneable{
private int aInt=0;
public int getAInt(){
return aInt;
}
public void changeInt(){
this.aInt=1;
}
public Object clone(){
Objecto=null;
try{
o=(Obj)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
}
输出结果:0,1.
上述是浅拷贝,但是当类中包含了一些对象时,就需要用到深拷贝了,实现方法是在对对象调用clone()方法完成复制后,接着对对象中的非基本类型的属性也调用clone()方法完成深复制。
Java中创建对象的方式:1通过new实例化一个对象 2通过反射机制创建对象 3通过clone()方法创建对象 4通过反序列化的方式创建对象。