java 面向对象代码块及不同位置对属性赋值的执行顺序

目录
  • 代码块
  • 对属性可以赋值的位置
  • 不同位置对属性赋值的执行顺序
  • 结语

前言:

java中的代码块介绍以及一个类中不同位置对属性赋值的执行顺序。

代码块

  • 1.代码块的作用:用来初始化类、对象
  • 2.代码块如果有修饰的话,只能使用 static
  • 3.分类:静态代码块 VS 非静态代码块
  • 4.静态代码块
    • 内部可以有输出语句。
    • 随着类的加载而执行,而且只执行一次。
    • 作用:初始化类的信息。
    • 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行。
    • 静态代码块的执行要优先于非静态代码块的执行。
    • 静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构。
  • 5.非静态代码块
    • 内部可以有输出语句。
    • 随着对象的创建而执行。
    • 每创建一个对象,就执行一次非静态代码块。
    • 作用,可以在创建对象时,对对象的属性等进行初始化。
    • 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行。
    • 非静态代码块内可以调用静态的属性、静态的方法、或非静态的属性、非静态的方法。

对属性可以赋值的位置

  • 默认初始化
  • 显式初始化
  • 构造器中初始化
  • 在代码块中赋值
  • 有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值

不同位置对属性赋值的执行顺序

对于有代码块的赋值顺序:1>2 / 4>3>5

package 代码块;

public class Demo {
    public static void main(String[] args) {
        People p =  new People();
        p.age = 4;
        System.out.println("这是对象.属性赋值后输出的值:" + p.age);

    }
}
class People{
    int age = 1;
    People(){
        this.age = 2;
        System.out.println("这是构造器输出的值:" + this.age);
    }
    {
        this.age=3;
        System.out.println("这是代码块输出的值:" + this.age);
    }
}

当我们将显式初始化和在代码块中赋值的顺序调换一下,则结果又会不同,谁在上面,谁先执行

package 代码块;

public class Demo {
    public static void main(String[] args) {
        People p =  new People();
        System.out.println("这是对象.属性赋值前输出的值:" + p.age);
        p.age = 4;
        System.out.println("这是对象.属性赋值后输出的值:" + p.age);

    }
}
class People{
    {
        this.age=3;
        System.out.println("这是代码块输出的值:" + this.age);
    }
    int age = 1;
    People(){
        System.out.println("这是构造器输出的值:" + this.age);
    }
}

因此结论是:默认初始化> 显式初始化/在代码块中赋值 >构造器中初始化>有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值

结语

到此这篇关于 java 面向对象代码块及不同位置对属性赋值的执行顺序的文章就介绍到这了,更多相关 java 属性赋值执行内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java Mybatis使用resultMap时,属性赋值顺序错误的巨坑

    目录 Mybatis使用resultMap属性赋值顺序错误 ids是后加入的字段 resultMap中是这样写的 解决办法 Mybatis使用resultMap时需注意 Mybatis使用resultMap属性赋值顺序错误 今天发现个坑,新建的表使用生成工具生成的mapper文件和实体类后,发现少了个字段就又手动加了下,结果发现一个问题 ids是后加入的字段 @Data @Builder public class QueryRecordPo {        //若干其他属性....     p

  • spring为java.util.Properties类型的属性进行赋值过程解析

    这篇文章主要介绍了spring为java.util.Properties类型的属性进行赋值过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串.在spring中可以用其存储连接数据库的相关信息. DataSource.java package com.gong.spring.beans; import ja

  • Java实现不同的类的属性之间相互赋值

    在开发的时候可能会出现将一个类的属性值,复制给另外一个类的属性值,这在读写数据库的时候,可能会经常的遇到 ,特别是对于一个有继承关系的类的时候,我们需要重写很多多余的代码,下面有一种简单的方法实现该功能 1.首先有两个类,两个类之间有相同的属性名和类型,也有不同的属性名很类型: public class ClassTestCopy2 { private int id; private String name; private String password; private String sex

  • java 利用反射机制,获取实体所有属性和方法,并对属性赋值

    一个普通的实体Person: private int id; private String name; private Date createdTime; ... //其它字段 // get set方法 ............... 现在需要把通过webService传过来的实体Person里面的所有字段的null值,换成"" 实现思路: 1.获取实体的所有字段,遍历 2.获取字段类型 3.调用字段的get方法,判断字段值是否为空 4.如果字段值为空,调用字段的set方法,为字段赋值

  • Java循环对bean的属性进行赋值的实现

    项目背景 我们开发过程中会碰到这样一类问题,就是数据层或三方接口返回的Bean对象需要转换重新装换一下我们需要的对象.我们通常的做法就是通过getter/setter方法进行一个一个进行赋值,这样的话书写起来太复杂了,并且太重复了.我尝试写了一个工具类,能够对各种场景下的对象进行相互赋值. 功能介绍 可以为将要赋值的对象进行单个单个的按顺序赋值 通过传递的属性的index(就是他是第几个属性)获取本属性的值 返回对象中属性的数量 两个对象之间相互拷贝属性值 传递一个list,遍历bean进行赋值

  • java反射遍历实体类属性和类型,并赋值和获取值的简单方法

    实例如下: import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Date; /** * 获取实体类型的属性名和类型 * @param model 为实体类 * @author kou 为传入参数 */ public class GetModelNameAndType { public

  • java 面向对象代码块及不同位置对属性赋值的执行顺序

    目录 代码块 对属性可以赋值的位置 不同位置对属性赋值的执行顺序 结语 前言: java中的代码块介绍以及一个类中不同位置对属性赋值的执行顺序. 代码块 1.代码块的作用:用来初始化类.对象 2.代码块如果有修饰的话,只能使用 static 3.分类:静态代码块 VS 非静态代码块 4.静态代码块 内部可以有输出语句. 随着类的加载而执行,而且只执行一次. 作用:初始化类的信息. 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行. 静态代码块的执行要优先于非静态代码块的执行. 静态代码

  • Java同步代码块解决银行取钱的安全问题实例分析

    本文实例讲述了Java同步代码块解决银行取钱的安全问题.分享给大家供大家参考,具体如下: 一 点睛 为了解决类似银行取钱这类安全问题,Java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法是同步代码块.同步代码块的语法格式是: synchronized(obj) { //此处代码块就是同步代码块. } 上面语法格式中种的obj就是同步监视器,上面代码的含义是:线程开始执行同步代码块之前,必须先获得对同步监视器的锁定. 任何时刻只能由一个线程获得对同步监视器的锁定,当同步代码

  • Java构造代码块,静态代码块原理与用法实例分析

    本文实例讲述了Java构造代码块,静态代码块原理与用法.分享给大家供大家参考,具体如下: 本文内容: 局部代码块 构造代码块 静态代码块 补充 首发日期:2018-03-28 局部代码块: 局部代码块用于限制变量的生命周期,如果希望某些变量在某一过程之后直接失效而不希望被后面继续操作时,可以使用局部变量来限制变量的生命周期带局部代码块中 构造代码块: 构造函数只对对应的对象进行初始化,构造代码块给类的所有对象进行初始化. 由于构造代码块给类的所有对象进行初始化,所以对于每个对象都要初始化成一样值

  • Java浅析代码块与构造块及静态块三者之间的关系

    目录 普通代码块(本地代码块) 构造块(实例代码块) 静态块(静态代码块) 他们之间有什么关系呢 例子 分析 普通代码块(本地代码块) 定义在方法里面用{ }括起来的代码块(凡是用{ }括起来都叫代码块,只是没有细分),就是普通代码块,也叫本地代码块.(不多见,也不常用) 例如: public class Test { public static void main(String[] args){ { System.out.println("本地代码块!"); } } } 构造块(实例

  • Java 普通代码块静态代码块执行顺序(实例讲解)

    如下所示: class B { public B() { super(); System.out.println("构造器B"); } { System.out.println("普通的代码块B"); } static{ System.out.println("静态代码块B"); } } public class ClassA extends B { public ClassA() { super(); System.out.println(&q

  • Java同步代码块和同步方法原理与应用案例详解

    本文实例讲述了Java同步代码块和同步方法.分享给大家供大家参考,具体如下: 一 点睛 所谓原子性:一段代码要么执行,要么不执行,不存在执行一部分被中断的情况.言外之意是这段代码就像原子一样,不可拆分. 同步的含义:多线程在代码执行的关键点上,互通消息,相互协作,共同把任务正确的完成. 同步代码块语法: synchronized(对象) { 需要同步的代码块; } 同步方法语法: 访问控制符 synchronized 返回值类型方法名称(参数) { 需要同步的代码; } 二 同步代码块完成卖票功

  • java 浅析代码块的由来及用法

    1.概述   代码块也是属于类中的成员(即是类的一部分),类似于方法,将逻辑语句封装在方法体中,通过{}包围起来.在类加载时或创建对象时隐式调用.   下面为主要代码块的格式与详细解析概述: 2.主要应用顺序: 分析应用场景:当所在的类中的需要进行一些必要的操作时,可以通过放在代码块来进行,而不用通过给每个构造器放入相同的语句,会显得比较多余. 应用顺序:无论创建对象时,都会优先调用代码块中的内容.这里当你运用代码块时,是需要将调用构造器时候会自动先调用代码块. 3.代码块的注意事项和细节议论

  • 举例说明Java中代码块的执行顺序

    前言     今天在看Android ContentProvider实现的时候,突然想到了Java类在new的过程中,静态域.静态块.非静态域.非静态块.构造函数的执行顺序问题.其实这是一个很经典的问题,非常考察对Java基础知识的掌握程度.很多面试过程中相信也有这样的问题,趁着周末有时间复习一下. 结论     这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的过程中,执行顺序如下: 实现自身的静态属性和静态代码块.(根据代码出现的顺序决定谁先执行) 实现自

  • Java静态代码块作用及执行顺序解析

    一般情况下,如果有些代码必须在项目启动的时候就执行,需要使用静态代码块.这种代码是主动执行的,需要在项目启动的时候就初始化. 有些代码是在不创建对象的情况下,由其他程序来调用,需要使用静态方法.这种代码是被动执行的. 静态方法在类加载的时候就已经加载,可以用类名直接调用 比如main方法就必须是静态的 这是程序入口 两者的区别就是:静态代码块是自动执行的,而静态方法是被调用的时候才执行的. 区别很简单: 静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次: 非静态代码块,在创建对象的时

  • Java静态代码块加载驱动代码实例

    Demo1.funx(); String s=Demo1.string; 静态代码块 会在new一个该类对象时调用 或者调用该类的静态方法,静态成员变量时调用 总之在类加载器将该类加载到内存中时 (无论是通过哪种方式) 都会调用静态代码块 静态成员变量 静态代码块永远只被初始化一次 无论new多少个对象 加载类时 初始化顺序 静态成员->静态代码块 ->变量,初始化块->构造函数 由于静态代码块永远只被加载一次的特性 常被用来加载配置文件 等初始化操作(单例模式) 例子 static {

随机推荐