java运行过程,初始化的顺序,构造函数,变量作用域,反射机制,面向对象的特征

java是解释性语言

运行过程:程序源代码经过java编译器编译成字节码,然后由JVM解释执行。

Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。

Java源程序 → java编译器 (编译) → 虚拟机(解释执行) →  解释器(翻译) → 机器码

Java的运行原理

http://www.cnblogs.com/o-andy-o/archive/2012/04/11/2442109.html

Java虚拟机工作流程:装载>链接>初始化>使用(包括实例化)

java初始化的顺序

在java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才能调用对象所在类的构造函数创建对象。

java程序初始化的工作可以在许多不同的代码块中来完成,它们的执行顺序如下:父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数。

构造函数:在对象实例化时初始化对象的成员变量
(1)构造函数必须与类名相同,且不能有返回值。
(2)每个类可以有多个构造函数。当开发者没有提供构造函数时,编译器在把源代码编译成字节码的过程中会提供一个没有参数的默认的构造函数,如果开发者有提供构造函数,编译器不会再创建默认构造函数。
(3)构造函数可以有0个到多个参数。
(4)构造函数总是和new操作一起调用,且不能由程序编写者直接调用,必须由系统在对象初始化时自动调用,且只运行一次。
(5)构造函数不能被继承,所以不能被覆盖,但是可以被重载
(6)子类可以通过super关键字来显式调用父类的构造函数,当父类没有提供无参数的构造函数时,子类的构造函数中必须显示的调用父类的构造函数。如果父类提供了无参数的构造函数,此时子类的构造函数就可以不显式的调用父类的构造函数,在这种情况下编译器会默认调用父类提供的无参数的构造函数。当有父类时,在实例化对象时会先执行父类的构造函数,然后执行子类的构造函数。
(7)当父类和子类都没有定义构造函数时,编译器会为父类生成一个默认的无参数的构造函数,给子类也生成一个默认的无参数的构造函数。此外,默认构造器的修饰符只跟当前类的修饰符有关(例如:如果一个类被定义为public,那么它的构造函数也是public)。

java中的作用域

在java语言中,变量的类型主要有三种:成员变量,静态变量和局部变量。

类的成员变量的作用范围与类的实例化对象的作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量的生命周期才结束。

被static修饰的成员变量被称为静态变量或全局变量,与成员变量不同的是,静态变量不依赖于特定的实例,而是被所有实例所共享,也就是说,只要一个类被加载,JVM就会给类的静态变量分配存储空间因此,就可以通过类名.变量名来访问静态变量。

局部变量的作用域与可见性为它所在的花括号内。

成员变量的4种作用域:

作用域与可见性 :   (其他package )public >(子类) protected>(同一package)default>(当前类)private                                          

public static void main (String []args)为java程序入口方法,JVM在运行程序时会首先查找main()方法。其中,public是权限修饰符,表示任何类或对象都可以访问这个方法,static表示main方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名.main()直接访问。必须保证main()方法的返回值为void,并有static与public关键字修饰,并且不能用abstract关键字修饰。

同一个.java文件中可以有多个main()方法,但但只有与文件名相同且用public修饰的类中的main()方法才能作为整个程序的入口方法。

同一个.java文件中可以有多个类,但是最多只能有一个类被public修饰,且这个类的类名与文件名必须相同,若该文件中没有public的类,则文件名随便试一个类的名字即可。

怎么用命令提示符编译java程序?http://jingyan.baidu.com/article/e73e26c0ce4e1624adb6a7ff.html


java在处理基本数据类型(如int,char,double)时,都是采用按值传递(传递的是输入参数的复制)的方式执行,除此之外的其他类型都是按引用传递(传递的是对象的一个引用)的方式执行。对象除了在函数调用时时引用传递,在使用“=”复制时也采用引用传递。

java的反射机制
反射机制可以实现在运行时对类进行装载,提供的功能有:得到一个对象所属的类;获取一个类所有的成员变量和方法;在运行时创建对象;在运行时调用对象的方法。

面向对象的特征:抽象,继承,封装,多态。
继承:子类至多只能有一个父类,子类只能继承父类的非私有(public与protected)成员变量和方法;
           当子类定义的成员变量与父类定义的成员变量同名时,子类的成员变量会覆盖父类的成员变量,而不会继承;
           当子类中的方法与父类的方法有相同的函数签名(相同的方法名,参水个数与类型)时,子类将会覆盖父类的            方法,而不会继承。
多态:两种表现形式:重载和覆盖,编译时多态通过方法的重载实现,运行时多态时通过方法的覆盖(子类覆盖父类方法)实现的。
           重载是指同一个类中有多个同名的方法,但这些方法有不同的参数,所以在编译时就可以确定到底调用哪个方法,是一种编译时多态。
           覆盖:子类可以覆盖父类的方法   Base b=new Derived();  调用Base类的构造函数,实际创建的是Derived类的对象。https://zhidao.baidu.com/question/1957728722095175660.html
Java基础篇1.谈谈你对java的认识(java的特性)2.抽象类与接口http://blog.csdn.net/liufeng_king/article/details/12970621

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值