-
[Java] Java类属性和对象属性的初始化顺序
2014-07-16 16:56:31Java类属性和对象属性的初始化顺序如下: (1)Java类属性和对象属性的初始化顺序如下:
(1) 类属性(静态变量)定义时的初始化
(2) static块中的初始代码
(3) 对象属性(非静态变量)定义时的初始化
(4) 构造方法(函数)中的初始化代码
下面举例说明:
<pre name="code" class="java">public class test { //类属性 static String a = "string-a"; static String b; //对象属性 String c = "string-c"; String d; //static块 static{ printStatic("before static"); b = "string-b"; printStatic("after static"); } public static void printStatic(String title) { System.out.println("***********"+title+"*****************"); System.out.println("a = \"" + a + "\""); System.out.println("b = \"" + b + "\""); } //构造函数 public test() { print("before constructor"); d = "string -d"; print("after constructor"); } public void print(String title) { System.out.println("************"+ title + "****************"); System.out.println("a = \"" + a + "\""); System.out.println("b = \"" + b + "\""); System.out.println("c = \"" + c + "\""); System.out.println("d = \"" + d + "\""); } public static void main(String[] args) { new test(); } }
上面程序的运行结果如下:
***********before static***************** a = "string-a" b = "null" ***********after static***************** a = "string-a" b = "string-b" ************before constructor**************** a = "string-a" b = "string-b" c = "string-c" d = "null" ************after constructor**************** a = "string-a" b = "string-b" c = "string-c" d = "string -d"
由此可以看出类属性与对象属性的初始化顺序。
-
JAVA类属性和对象属性的初始化顺序
2016-07-14 16:11:501)类属性(静态变量)定义时的初始化,如:static String ="string-a"; 2)static块中的初始化代码,如 ...3)对象属性(非静态变量)定义时的初始化,如:static c="string -c"; 4)构造方法(函数)中的初始化代码,1)类属性(静态变量)定义时的初始化,如:static String ="string-a";
2)static块中的初始化代码,如
static{
string b="string -b";
}
3)对象属性(非静态变量)定义时的初始化,如:static c="string -c";
4)构造方法(函数)中的初始化代码,
-
java类属性和对象属性的初始化顺序
2019-09-16 16:38:08代码演示: public class usingAttribute { static String str1=“string1”; static String str2;...static{//static语句用于初始化static成员变量,是最先运行的语句块 printStatic(“before static”); str2=...代码演示:
public class usingAttribute
{
static String str1=“string1”;
static String str2;
String str3=“string3”;
String str4;
static{//static语句用于初始化static成员变量,是最先运行的语句块
printStatic(“before static”);
str2=“string2”;
printStatic(“after static”);
}
public static void printStatic(String title)
{
System.out.println("------"+title+"-----");
System.out.println(“str1=”"+str1+""");
System.out.println(“str2=”"+str2+""");} public usingAttribute() { print("before constructor"); str4="string4"; print("after constructor"); }//定义了一个构造方法usingAttribute(),在这个方法中,使用了类中的各个属性。构造方法与类同名,且无返回值(包括void),它的主要目的是创建对象。 public void print(String title) { System.out.println("-----"+title+"-----"); System.out.println("str1=\""+str1+"\""); System.out.println("str2=\""+str2+"\""); System.out.println("str3=\""+str3+"\""); System.out.println("str4=\""+str4+"\""); } public static void main(String[] args){ System.out.println(); System.out.println("-----创建usingAttribute对象-----"); System.out.println(); new usingAttribute();//使用关键字new和构造方法usingAttribute()来创建一个匿名对象; }
}
由输出结果可以看出,Java类属性和对象属性的初始化顺序如下:
(1)类属性(静态变量)定义时的初始化,如范例中的static String str1=“string1”;
(2)static块中的初始化代码,如范例中的static{}中的str2=“string-2”;
(3)对象属性(非静态变量)定义时的初始化,如范例中的String str3=“string3”;
(4)构造方法(函数)中的初始化代码,如范例构造方法中的str4=“string4”.
当然这里只是为了演示java类中的属性和对象属性的初始化顺序。在实际的应用中并不建议在类中定义属性时实施初始化,如例子中的字符串变量:“str1”,“str3”.
请注意,被static修饰的变量称为类变量(class variables),它们被类的实例所共享。也就是说,某一个类的实例化改变了这个静态值,其他这个类的实例也会受到影响。而成员变量(member variable)则是没有被static修饰的变量,为实例所私有,也就是说,每个类的实例都有一份自己专属的成员变量,只有当前实例才可更改它们的值。
static是一个特殊的关键字,其在英文中直译就是“静态”的意思。它不仅用于修饰属性(变量)、成员,还可以用来修饰类中的方法。被static修饰的方法,同样表明它是属于这个类共有的,而不是属于该类的单个实例,通常把static修饰的方法也称为类方法。 -
Java类中类属性和对象属性的初始化顺序
2010-07-27 15:24:00Java 类中类属性 (static 变量) 和对象属性 (非 static 变量) 的初始化顺序可以用如下程序测试: <br /> /** * @(#) Test.java * @author fancy */ <br /> public class ...Java 类中类属性 (static 变量) 和对象属性 (非 static 变量) 的初始化顺序可以用如下程序测试:
/**
* @(#) Test.java
* @author fancy
*/
public class Test {
static String a = "string-a";
static String b;
String c = "stirng-c";
String d;
static {
printStatic("before static");
b = "string-b";
printStatic("after static");
}
public static void printStatic(String title) {
System.out.println("---------" + title + "---------");
System.out.println("a = /"" + a + "/"");
System.out.println("b = /"" + b + "/"");
}
public Test() {
print("before constrUCtor");
d = "string-d";
print("after constructor");
}
public void print(String title) {
System.out.println("---------" + title + "---------");
System.out.println("a = /"" + a + "/"");
System.out.println("b = /"" + b + "/"");
System.out.println("c = /"" + c + "/"");
System.out.println("d = /"" + d + "/"");
}
public static void main(String[] args) {
new Test();
}
}
首先,我把 main() 方法注释掉,运行结果如下:
---------before static---------
a = "string-a"
b = "null"
---------after static---------
a = "string-a"
b = "string-b"
java.lang.NoSuchMethodError: main
Exception in thread "main"
Process completed.
然后,取消对 main() 方法的注释,运行结果如下:
---------before static---------
a = "string-a"
b = "null"
---------after static---------
a = "string-a"
b = "string-b"
---------before constructor---------
a = "string-a"
b = "string-b"
c = "stirng-c"
d = "null"
---------after constructor---------
a = "string-a"
b = "string-b"
c = "stirng-c"
d = "string-d"
由此可以看出 Java 类属性和对象属性的初始化顺序如下:
① 类属性 (静态变量) 定义时的初始化,如上例的 static String a = "string-a";
② static 块中的初始化代码,如上例 static {} 中的 b = "string-b";
③ 对象属性 (非静态变量) 定义时的初始化,如上例的 String c = "stirng-c";
④ 构造方法 (函数) 中的初始化代码,如上例构造方法中的 d = "string-d";
在此过程中 ② 和 ③ 的顺序无所确定,因为在静态块中无法打印出非静态变量。
同样是因为这个原因,知道他们的顺序对我们写程序也毫无帮助。再因为类成员 (静态成员) 是在第一次使用到类的时候就进行了相应的初始化,而对象成员 (非静态成员) 则需要生成类实例 (即对象) 时才能初始化,所以我把 ③ 排在了 ② 的后面。再申明一次,它们究竟谁先谁后,从代码上是不能确定的,恐怕需要去研究一下 JVM (Java 虚拟机) 的执行过程才行。
以下是一些回帖的讨论:
我对狂人教程"对象成员 (非静态成员) 则需要生成类实例 (即对象) 时才能初始化"有些看法!例如你在例程中定义的两个对象成员变量String c = "stirng-c";
String d;我认为当程序执行这个Test类的时候,成员变量(不包括构造函数)和类成员变量一样,都要装载到内存。这样对象成员变量就可以被构造函数所调用。但是究竟静态变量和非静态变量哪个先执行可以看在代码中的先后顺序,但是这对于编写代码来说并没有多大的用处!
static
{
printStatic("before static");
b = "string-b";
printStatic("after static");
}在??第一次使用而蒌入??行,且只?行一次。。。。。
--caterpillar
(http://www.hackhome.com/)(http://www.hackhome.com/InfoView/Article_117743_2.html) -
Java自学-类和对象 属性初始化
2019-03-29 08:16:38Java的属性初始化 步骤 1 : 对象属性初始化 对象属性初始化有3种 1. 声明该属性的时候初始化 2. 构造方法中初始化 3. 初始化块 package charactor; public class Hero { public String name = "some hero";... -
Java扫雷之Java类的成员属性生命周期的应用。(成员属性生命周期和对象一致)
2017-09-09 12:04:29总之一句话:对象存在,它的成员变量就存在,【 就可以不断地在上次变化...Java AWT, BombButton对象有一个标记是否是雷 标记属性isBomb,和一个 标记点击次数的clickCount属性。 每次点击BombButton,监听器事件处理 -
Java访问对象的属性和行为
2020-03-10 15:09:15每个对象都有自己的属性和行为,这些属性和行为在类中体现为成员变量和成员方法,其中成员变量对应对象的属性,成员方法对应对象的行为。 在 Java 中,要引用对象的属性和行为,需要使用点(.)操作符来访问。对象名... -
java类和对象,属性初始化
2019-03-13 16:43:28对象属性初始化有3种 声明该属性的时候初始化 构造方法中初始化 初始化块 package charactor; public class Hero { public String name = "some hero"; //声明该属性的时候初始化 protected float ... -
java获取实体类的属性名和属性值
2021-01-28 12:22:45Field常用方法Field获取实体类的属性名和属性值实现步骤输出结果 Field是什么? Field是一个类,位于java.lang.reflect包下。在Java反射中Field类描述的是类的属性信息,功能包括: 获取当前对象的成员变量的类型 对... -
Java根据类属性值从一个集合中找到和该属性相等的对象
2018-06-30 18:39:12使用common-utils包提供的CollectionUtils和BeanPropertyValueEqualsPredicate 比如找id属性值为9587的用户 Object obj = CollectionUtils.find(UserList.get(), new BeanPropertyValueEqualsPredicate("id&... -
JAVA的类属性,静态属性
2019-04-02 20:16:35不同对象的 对象属性 的值都可能不一样。 比如盖伦的hp 和 提莫的hp 是不一样的。 但是所有对象的类属性的值,都是一样的 步骤 1 : 类属性 类属性: 又叫做静态属性 对象属性: 又叫实例属性,非静态属性 如果一个... -
java-类与对象(访问对象的属性和行为)、
2017-05-22 17:51:11对象的定义方法: 1,对象声明:类名 对象名; 2,对象创建 对象名 = new 类名(); new作用:分配内存空间。 也可以合写为:类名 对象名 = new 类名(); package asa; //设计一个空调 public class aaaa { //空调... -
java初学,类对象和属性创建
2019-03-11 09:56:07初学java,有什么写的不对的地方 ,还望诸位大佬能指出来; Hero time = new() Hero; // 这是实例化 time.name = "提莫"; //给属性赋值 -
Java类的属性赋值的位置和先后顺序
2020-02-25 21:56:351.默认初始化 2.显示初始化、代码块中初始化 3.构造器中初始化 4.通过“对象.属性”或“对象.方法”井下赋值 -
java类的静态属性和静态块执行时间
2017-11-01 11:25:30java类的静态属性和静态块执行条件如下所示: 1.如果java类在项目启动的时候,就创建了实例(例如new Person())或者此类的对象交给spring框架管理(依赖注入ioc),那么项目启动的时候就执行这个Java类的所有... -
java中类和函数、方法、属性,以及对象的区别
2020-03-30 23:32:431 类和函数、方法 ...此时在该类中的函数,我们可以称之为该实体类的方法了,该实体类中的变量,我们可以称之为该实体类的属性。我们这里以一个Person实体类为例。 public class Person { private String ... -
Java——JavaBean的属性和成员变量区别(BeanUtils工具类中操作对象)
2020-01-08 16:06:191. JavaBean:标准的Java类 类必须被public修饰 必须提供空参的构造器 成员变量必须使用private修饰 提供公共setter和getter方法 成员变量和属性的区别: 成员变量:成员变量是定义在类里面的,是类中的属性; ... -
JAVA 类和对象的实例
2019-01-15 11:01:23JAVA 类和对象的实例 什么是类? 1. 类是具有相同的属性和功能的事物的抽象的集合,在面向对象程序设计中,人们把一类事物的静态属性和动态可以执行的操作组合在一起就得到类这个概念。 2. 类是个抽象的概念,用来... -
Java 类属性
2018-12-15 17:40:26不同对象的 对象属性 的值都可能不一样。 比如盖伦的hp 和 提莫的hp 是不一样的。 但是所有对象的类属性的值,都是一样的 步骤 1 : 类属性 类属性: 又叫做静态属性 对象属性: 又叫实例属性,非静态属性... -
java对象复制和属性值复制工具类
2017-11-30 16:19:10两个不同类型的对象中有字段名称不区分大小写的情况下一样,字段含义一样,需要组装到另一个对象中去,然后就写了一个这种工具类 我的类型比较特殊,老系统和新系统的对象命名大小写命名不一致,并且字段相同类型也... -
Java类和对象
2020-07-31 23:40:051 类和对象的理解【理解】 2 类的定义【应用】 3 对象的使用【应用】 4 学生对象-练习【应用】 1 类和对象的理解【理解】 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。 类 类的理解 类是对现实... -
java反射理解,通过反射获取并修改类的对象,方法和属性
2019-01-24 18:58:32这里声明一个类的对象(注意Class中c是大写,class是关键字) 然后获取路径(包名+类名),这样c虽然不是User类,但是就相当于一面镜子 可以通过c获得对象,所以称为“反射” 说明 下面举例说明,这是... -
Java 类和对象
2018-01-06 15:24:56Java 类和对象 ...对类的描述:(属性和行为) 属性:一般都使用名词来修饰 行为:一般都使用动词来修饰 类中写 成员变量(实例方法)写在类中方法外 成员方法(实力方法)写在类中 创建对象: 类名 ... -
Java利用反射实例化对象,获取对象的私有属性的值和调用类的私有方法
2018-07-23 19:39:58//类的完整路径 oj1 = class1.newInstance(); //默认调用People的无参构造器 People p1 = (People)oj1; System.err.println(p1.getName()); } catch (ClassNotFoundException e) { // ... -
java 一个类的对象访问私有属性的问题
2013-09-14 17:29:23public class ModifierTest1 ...这个程序中一共创建了两个A类的对象,在类A的f()方法中创建的对象a,可以之间用a.i和a.s访问私有成员变量,而在main函数中创建的对象却不可如此使用,有点糊涂了,谁能帮忙解释下,谢了 -
Scala的类的私有属性和对象的私有字段
2016-05-01 08:03:57在Scala中,一个类定义了一个属性,如果不是private的 var age=0 那么它也会默认当成private级别的属性,同时会默认生成setter和getter方法,当调用的时候,...所以可以通过方法访问类的所有的属性,同java中的javabe -
Java入门(二)chapter1 - java中的类和对象
2017-10-31 03:50:58CHAPTER1 – java中的类和对象 面向对象 什么是类 类是对象的类型。 是具有相同属性和方法的一组对象的集合。 什么是对象的属性 属性:对象的各种特征,也可以称为成员变量。 每个对象的每个属性都拥有特定值。 ...