1.初始化
- 基本类型自动初始化为0,类自动初始化为null。
- 编译器并不是简单的为每一个引用创建默认对象,如果想初始化这些引用,可以在下列位置
-- 1定义对象的地方,例如成员变量,private String = "hello",这是在定义时初始化
--2构造器
--3使用这些对象之前
--4使用实例初始化
关于初始化顺序参见http://1877998.blog.51cto.com/1867998/473728,http://xjlnjut730.iteye.com/blog/407893点击打开链接
2.构造器
-构造过程是从基类往外扩散的,先访问基类构造器,在访问子类构造器。
-如果基类和子类构造器参数不同或一个有参一个无参,只需要在子类的构造器里加上父类的构造,如
class Art { private String s; Art(String s) { this.s = s; print("Art constructor s = "+s); } } class Drawing extends Art { private String s2; Drawing(String s1, String s2) { super(s1); this.s2 = s2; print("Drawing constructor s2 ="+s2); } }
class Art { private String s; Art(String s) { this.s = s; print("Art constructor s = "+s); } } class Drawing extends Art { Drawing() { super("something"); print("Drawing constructor"); } }3.多态
多态用到动态绑定,动态绑定过程:
public class Son extends Father 2 Father son = new Son(); 3 son.method();- 首先,编译器根据对象的声明类型和方法名,搜索相应类(Son)及其父类(Father)的“方法表”,找出所有访问属性为public的method方法。 可能存在多个方法名为
method的方法,只是参数类型或数量不同。若子类重写父类的方法,则调用子类的方法,若子类没有重写父类的方法,则用父类的方法。
- 然后,根据方法的“签名”找出完全匹配的方法。 方法的名称和参数列表称为方法的签名。
-如果是private、static、final 方法或者是构造器,则编译器明确地知道要调用哪儿个方法,这种调用方式成为“静态调用”。
-调用方法。
动态绑定只针对对象的方法,对属性无效。
接口和抽象类
区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。
相似一,抽象方法和接口方法均不能有方法体,继承类对于抽象类所定义的抽象方法和接口类所定义的方法,在继承类中必须要给出相应的方法和属性实现。
区别二,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。
区别三,接口中可以有变量,但是不能为private和protected,接口中的变量,本质上都是static final的,不管加不加static修饰,在java开发中,通常把经常用的变量,定义在接口中,作为全局变量使用,一个接口可以继承另一个接口;
区别三,抽象类可以没有抽象方法;
4.为什么要使用Java虚拟机
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代
码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
Java运行机制
Java程序的运行必须经过编写、编译、运行三个步骤。
编写是指在Java开发环境中进行程序代码的输入,最终形成后缀名为.java的Java源文件。
编译是指使用Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件,这不像C语言那样最终生成可执行文件。
运行是指使用Java解释器将字节码文件翻译成机器代码,执行并显示结果。
5.JRE和JDK的区别
在安装程序时,如果留意你会发现安装了 JRE、和JDK,这两个概念一定要搞清楚。
JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。是Sun的产品,包括两部分:JavaRuntimeEnvironment和JavaPlug-in。JavaRuntimeEnvironment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具——编译器、调试器和其它工具。JRE需要辅助软件——JavaPlug-in——以便在浏览器中运行applet。J2RE是Java2
RuntimeEnvironment,即Java运行环境,有时简称JRE.如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发 Java软件,请下载JDK.在JDK中附带有JRE。注意由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行 Applet,务必安装一个JRE或JDK.
JDK 是整个Java的核心,包括了Java运行环境(Java RuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK.最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。
6.tomcat和Eclipse
tomcat自己指定java_home而不用环境变量http://yunzhongxia.iteye.com/blog/1315716
在bin/setclasspath.bat中修改
public class test1 { static int total = 0; static { System.out.println("a"); } }
public class testStatic { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("hello"); } }
public class testStatic { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("hello"); test1 a=new test1(); } }输出为
public class testStatic { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("hello"); System.out.println(test1.total); } }
public class testStatic { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("hello"); try { Class.forName("com.cainan.test1"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }输出