例子看
ChineseBreakfast.java
构造对象时,先给属性赋值,后调用构造方法
创建对象的执行顺序
1 分配内存
2 初使化变量,给默认初值
3 赋值(可选)
4 执行本类的构造方法
java的运行过程
1 调用super();this();
2 调用父类构造方法
a 调用super();this();
b 调用父类构造方法
3 初使化本类实例变量
4 执行本类构造方法
java的运行过程
一,我们所看不到的:
1,如果java文件没有package,就默认给文件加上"无名"package;
2,默认导入java.lang包,所以我们的java程序中可以使用Sting,Math,Integer等类,包括一些异常类;
3,如果生成的类没有父类,则为这个类隐式加上父类:Object;因此,包括Object中的许多方法可以使用;
4,字段的初始化;
二,我们所看的到的:
既然看的到,就先看程序运行结果:
package com.andrew;
public class Test {
public Test() {
System.out.println(" 构造函数");
}
static {
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
}
}
运行结果:
static{}
main()
显然,程序运行时,先运行:
static
{
System.out.println("static{}");
}
再调用main();
注意: 我们可以得到一个副产品:不用main方法也能运行的程序:
public class JRun1 {
static
{
System.out.println("no main()");
System.exit(0);
}
}
如果我们在类中建立一个对象:
package com.andrew;
public class Test {
public Test() {
System.out.println(" 构造函数");
}
static {
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
new Test();
}
}
运行结果:
static{}
main()
{}
构造函数
从而,我们得出:
建立一个非主类对象,顺序为:静态初始化块static{}-->初始化块{}-->构造函数constructor;
那么,牵涉到继承,运行流程又如何?
看程序:
package com.andrew;
class JRun1Father {
JRun1Father() {
System.out.println("父类构造函数");
}
static {
System.out.println("父类静态初始化块");
}
{
System.out.println("父类初始化块");
}
}
public class Test extends JRun1Father {
public Test() {
System.out.println("子类构造函数");
}
static {
System.out.println("子类静态初始化块");
}
{
System.out.println("子类初始化块");
}
public static void main(String[] args) {
// System.out.println("主方法)");
new Test();
}
}
运行结果:
父类静态初始化块
子类静态初始化块
父类初始化块
父类构造函数
子类初始化块
子类构造函数
所以,牵涉到父类:父静态-->子静态-->父初始化及构造-->子初始化及构造;
注意:初始化块和构造是接连运行的,不会父类子类交替.
*/
//pack.java
class superPack {
superPack() {
System.out.println("父类构造函数");
}
{
System.out.println("父类初始化代码块");
}
static {
System.out.println("父类静态代码块");
}
}
class subPack extends superPack {
subPack() {
System.out.println("子类构造函数");
}
{
System.out.println("子类初始化代码块");
}
static {
System.out.println("子类静态代码块");
}
};
public class pack {
pack() {
System.out.println("pack构造函数");
}
static {
System.out.println("pack静态代码块");
}
{
System.out.println("pack初始化代码块");
}
public static void main(String[] args) {
superPack testPack = new subPack();
}
};
/*
静态初始化块static{}
在类加载时被执行
并且只执行一次
静态初始化块static{}不用创建对象也能被执行
初始化块{}得创建对象才能执行
并且优先于构造方法
实例变量优先于初始化块{}
运行结果:
父 静
父类静态实例变量
父类静态初始化块
子 静
子类静态实例变量
子类静态初始化块
调用super();this();
父 实
父 初始化块{}
调用父类构造方法
a 调用super();this();
b 父 实
c 父 初始化块{}
d 调用父类构造方法
3 初使化本类实例变量
4 本类 初始化块{}
5 执行本类构造方法
程序块执行顺序
(加载类
连接相关资源
Main方法)
静态变量最好排在静态初始化块前面
父类静态变量、静态初始化块(两者的顺序由具体的程序块决定,看程序前后)
子类静态变量、静态初始化块(两者的顺序由具体的程序块决定,看程序前后)
父类实例变量、动态显式初始化块
子类实例变量、动态显式初始化块
父类构造方法
子类构造方法
*/
package com.andrew;
import static java.lang.System.*;
public class Test extends SuperClass {
static B a = new B();
static {
System.out.println("sun static");
}
public static void main(String[] args) {
out.println("System.out.println");
}
}
class SuperClass {
static A a = new A();
static {
System.out.println("super static");
}
}
class A {
A() {
System.out.println("super A");
}
}
class B {
B() {
System.out.println("sun B");
}
}
分享到:
相关推荐
Java语言以其跨平台性和自动内存管理机制而闻名,...Java运行过程包括类加载、字节码验证、解释执行等,这些步骤共同保证了程序的高效运行和安全性。理解这些概念对于优化Java应用程序性能和确保系统稳定性至关重要。
3. **Java运行过程**: - 类加载器(Class Loader)负责加载程序所需的类,它会检查类的安全性,如选项A所述,但不是加载所有类,因此A错误。正确答案是B、C和D。 - 类加载器的加载过程确保了本地类优先,增加了...
### DB2 Java 存储过程相关知识点 #### 标题:DB2 Java 存储过程 **DB2 Java 存储过程** 主要探讨的是如何在 IBM DB2 数据库环境中利用 Java 编写存储过程。这涉及到 DB2 的一系列产品和服务,特别是与 Java 集成...
由于Java运行环境(JRE)是运行Applet所必需的,因此,如果你尝试在IE浏览器中查看或使用Applet而遇到问题,可能是因为缺少这个特定的插件。 "jre-8u251-windows-i586.exe" 文件是Java运行环境的安装程序,适用于32...
将Java项目打包成可执行软件是一项实用且关键的技能,尤其对于希望在未安装Java虚拟机(JVM)的计算机上运行应用程序的开发者而言。这一过程不仅能够提高软件的兼容性和便携性,还能增强用户体验,减少用户在安装和...
JAVA入门基础篇,适合于初学者.第一章 Java语言入门 授课内容: ...7.分析Java运行过程,再次讲解Jvm、字节码等概念 8.简单介绍JSP技术 作业: 1. 配置环境变量 2. 完成第一个Java程序的编译及运行
总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。
在Java编程中,调用数据库的存储过程是常见的任务,特别是在处理复杂的业务逻辑或需要高效数据操作时。本文将详细讲解如何在Java中调用含有`OUT`参数的存储过程,帮助开发者解决这类问题。 首先,理解存储过程的...
Java运行环境(Java Runtime Environment,简称JRE)是执行Java应用程序所必需的软件组件,它提供了执行Java字节码的虚拟机(Java Virtual Machine,JVM)以及必要的库和其他支持文件。在Java开发中,编写好的Java...
这个最新的版本——"最新JAVA运行库"——确保了用户能够执行最新的Java应用程序,提供了一个稳定且安全的环境来运行这些程序。Java运行库包含了Java虚拟机(JVM)、Java类库以及其他必要的组件,使得开发者编写的一...
4. 存储过程在数据库服务器上执行Java代码的机制(如Oracle的Java Stored Procedures)。 5. 数据库管理工具,如Oracle SQL Developer和PL/SQL Developer。 6. Java开发环境,如Eclipse和IntelliJ IDEA。 7. 数据...
亿图软件绘制的Java基本运行原理图示,避免张贴图片格式,便于适应文档的撰写。简单明了的使用和修改
在本文中,我们将深入探讨如何在ARM架构的开发板上配置Java运行环境,以便能够成功地执行Java测试代码。ARM开发板通常用于嵌入式系统和物联网(IoT)设备,而Java是一种广泛使用的编程语言,尤其适用于这些平台。下面...
要使用Java编写和运行程序,首先需要正确配置Java运行环境,这通常包括安装Java Development Kit (JDK)、设置环境变量以及验证配置是否成功。本文将详细解释这个过程。 1. **Java Development Kit (JDK) 安装**: ...
Java存储过程是Oracle数据库中的一种特性,允许在数据库内部运行Java程序,提供了一种在数据库级别编写函数和存储过程的方式。 **1. Java存储过程的优势** - 提升执行效率:由于计算任务在数据库服务器端进行,可以...
本文将详细讲解如何通过Java来执行MySQL的存储过程。 首先,了解存储过程的基本概念。存储过程是预编译在数据库服务器端的一组SQL语句集合,可以在需要时重复调用,降低了网络传输的负担,提高了性能。MySQL存储...
首先,理解Java的解释与编译执行过程是关键。Java程序在执行前,会通过Java编译器(javac)将源代码编译为字节码,这是平台无关的中间表示。然后,当Java虚拟机加载这些字节码时,它有两种执行方式:解释执行和编译...
- **从SQL调用Java存储过程**:通过SQL语句直接调用Java存储过程,实现数据库逻辑的高效执行。 - **从Java调用SQL**:Java存储过程中可以轻松访问数据库对象,执行SQL查询或更新操作。 - **JPublisher**:一种用于...