Android-Java构造代码块&构造方法隐式三行
构造代码块:
描述Teacher对象/实体:
- package android.java.oop06;
- public class Teacher {
- private int id = 007;
- private String name = "零零发";
- private int age = 98;
- private float height = 1.78F;
- /**
- * 静态代码块:当前Teacher类,被加载进内存时 就会执行此静态代码块里面的主体{}
- * 可以说是最先执行的,可以在这里做一些静态成员的初始化工作
- */
- static {
- System.out.println("静态代码块:当前Teacher类,被加载进内存时 就会执行此静态代码块里面的主体{}");
- System.out.println("");
- }
- /**
- * 构造代码块:每一个构造函数,的第三行执行者 就是构造代码块;
- * 构造代码块可以给成员变量字段进行初始化工作等;
- */
- {
- System.out.println("构造代码块 被所有构造方法的第三行执行者 执行了...");
- showAllValue();
- }
- /**
- * 构造函数是专门给对象实例化用的:
- * new Teacher(); ---> public Teacher(){}
- * ...
- *
- * 就算不写构造函数 也会默认有一个无参构造函数;
- * 一旦写了 无参构造函数/有参构造函数 后 默认隐式的那个构造函数就不见了
- */
- public Teacher() {
- System.out.println("无参构造函数,我被new Teacher()实例化了");
- showAllValue();
- return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
- }
- /**
- * 构造函数是专门给对象实例化用的:
- * new Student(9); ---> public Student(int value){}
- * ...
- *
- * 就算不写构造函数 也会默认有一个无参构造函数;
- * 一旦写了 无参构造函数/有参构造函数 后 默认隐式的那个构造函数就不见了
- */
- public Teacher(int value) {
- System.out.println("有参构造函数,我被new Teacher(int类型的值)实例化了 value:" + value);
- showAllValue();
- return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
- }
- /**
- * 构造函数是专门给对象实例化用的:
- * new Student("刘俊", true); ---> public Student(String value1, boolean value2){}
- * ...
- *
- * 就算不写构造函数 也会默认有一个无参构造函数;
- * 一旦写了 无参构造函数/有参构造函数 后 默认隐式的那个构造函数就不见了
- */
- public Teacher(String name, boolean isSuccess) {
- System.out.println("无参构造函数,我被new Student(String类型的值, boolean类型的值)实例化了 name:" + name + " isSuccess:" + isSuccess);
- showAllValue();
- return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
- }
- // 打印所有的成员变量值
- private void showAllValue() {
- System.out.println("id:" + id + "\nname:" + name + "\nage:" + age + "\nheight:" + height + "\n");
- return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
- }
- }
main测试方法:
- package android.java.oop06;
- public class Demo01 {
- public static void main(String[] args) {
- // new Teacher(); ---> public Teacher(){}
- Teacher teacher1 = new Teacher();
- // new Student(9); ---> public Student(int value){}
- Teacher teacher2 = new Teacher(9988);
- // new Student("刘俊", true); ---> public Student(String value1, boolean value2){}
- Teacher teacher3 = new Teacher("毛对皮", true);
- }
- }
执行结果:
分析打印执行的结果中,每次调用构造方法,构造方法都会,先调用构造代码块,这是为什么呢,等结束完(构造方法隐式三行)就明白了;
构造方法隐式三行
1.分析打印执行的结果中,每次调用构造方法,构造方法都会,先调用构造代码块,这是为什么呢?;
解释:因为在所有构造方法中,【第三行】隐式的 会调用构造代码块;
2.为什么构造代码块中打印的成员变量是有值得呢?
解释:因为【第二行】给所有成员变量赋值了,所以构造代码块可以打印成员变量的值;
3.为什么构造方法中打印的成员变量是有值得呢?
解释:因为【第二行】给所有成员变量赋值了,所以构造方法可以打印成员变量的值;
- package android.java.oop06.teacher;
- public class Teacher {
- private int id = 007;
- private String name = "零零发";
- private int age = 98;
- private float height = 1.78F;
- /**
- * 构造代码块:每一个构造函数,的第三行执行者 就是构造代码块;
- * 构造代码块可以给成员变量字段进行初始化工作等;
- */
- {
- System.out.println("构造代码块 被所有构造方法的第三行执行者 执行了...");
- showAllValue();
- }
- /**
- * 每一个构造函数/所有构造函数都是这样的
- * 就以此构造函数为例:来介绍隐式 第一行 第二行 第三行 执行操作
- * 隐式的第一行、第二行、第三行、执行操作是默认执行的,是看不到的 隐式的
- */
- public Teacher() {
- // 【第一行】super(); 调用父类的 无参构造方法
- /**
- * 【第二行】
- * 给所有成员属性赋值 例如:一开始这些成员变量的值是id=0 name=null age=0
- * 就是执行了【第二行】才会去执行-->给id=赋值为007 name=赋值为="零零发" age=98)
- */
- // 【第三行】调用-->(构造代码块)
- System.out.println("无参构造函数,我被new Teacher()实例化了");
- showAllValue();
- return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
- }
- /**
- * 每一个构造函数/所有构造函数都是这样的
- * 就以此构造函数为例:来介绍隐式 第一行 第二行 第三行 执行操作
- * 隐式的第一行、第二行、第三行、执行操作是默认执行的,是看不到的 隐式的
- * @param value
- */
- public Teacher(int value) {
- // 【第一行】super(); 调用父类的 无参构造方法
- /**
- * 【第二行】
- * 给所有成员属性赋值 例如:一开始这些成员变量的值是id=0 name=null age=0
- * 就是执行了【第二行】才会去执行-->给id=赋值为007 name=赋值为="零零发" age=98)
- */
- // 【第三行】调用-->(构造代码块)
- System.out.println("有参构造函数,我被new Teacher(int类型的值)实例化了 value:" + value);
- showAllValue();
- return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
- }
- /**
- * 每一个构造函数/所有构造函数都是这样的
- * 就以此构造函数为例:来介绍隐式 第一行 第二行 第三行 执行操作
- * 隐式的第一行、第二行、第三行、执行操作是默认执行的,是看不到的 隐式的
- * @param name
- * @param isSuccess
- */
- public Teacher(String name, boolean isSuccess) {
- // 【第一行】super(); 调用父类的 无参构造方法
- /**
- * 【第二行】
- * 给所有成员属性赋值 例如:一开始这些成员变量的值是id=0 name=null age=0
- * 就是执行了【第二行】才会去执行-->给id=赋值为007 name=赋值为="零零发" age=98)
- */
- // 【第三行】调用-->(构造代码块)
- System.out.println("无参构造函数,我被new Student(String类型的值, boolean类型的值)实例化了 name:" + name + " isSuccess:" + isSuccess);
- showAllValue();
- return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
- }
- // 打印所有的成员变量值
- private void showAllValue() {
- System.out.println("id:" + id + "\nname:" + name + "\nage:" + age + "\nheight:" + height + "\n");
- return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
- }
- }
Android-Java构造代码块&构造方法隐式三行的更多相关文章
- java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题
今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...
- Java面试题 静态代码块 构造代码块 构造方法 的执行顺序
JAVA中的静态代码块 构造代码块 构造方法执行顺序: 静态代码块(类加载时执行)>>构造代码块>>构造方法 下面展示一个简单的例子,推荐大家动手运行一遍: public cl ...
- Java类中代码的执行顺序 静态代码块>构造代码块>构造方法
一:静态代码块 注意是代码块,不是静态函数.函数要调用才执行,代码块加载就执行,一般是静态变量的声明与初始化.被static修饰的代码块(赋值.输出操作等).类中静态语句块仅在类加载时被执行一次 如 ...
- Java学习之代码块(静态,构造代码块,构造方法)执行顺序
静态代码块 static{ 代码 } 随着类的加载而加载,随类的消失而消失,存在于类中,方法外,最先执行,且只加载1次,可用来加载驱动及初始化对象属性. 构造代码块 { } 也存在于类中, ...
- JAVA 构造代码块
class G{ G(){ System.out.println("我是无参构造方法"); } G(String name){ System.out.println("我 ...
- Java:构造代码块,静态代码块
本文内容: 局部代码块 构造代码块 静态代码块 补充 首发日期:2018-03-28 局部代码块: 局部代码块用于限制变量的生命周期,如果希望某些变量在某一过程之后直接失效而不希望被后面继续操作时,可 ...
- java构造代码块详解
一.简介 首先说一下,Java中有哪些代码块. 普通代码块 就是在方法后面使用"{}"括起来的代码片段,不能单独执行,必须调下其方法名才可以执行. 静态代码块 在类中使用stati ...
- java构造代码块,构造函数和普通函数的区别和调用时间
在这里我们谈论一下构造代码块,构造函数和普通函数的区别和调用时间.构造代码块:最早运行,比构造函数运行的时间好要提前,和构造函数一样,只在对象初始化的时候运行.构造函数:运行时间比构造代码块时间晚,也 ...
- java构造代码块与静态代码块
一:构造代码块 1.概述 作用:给对象初始化. 优先级:优先于对象的构造函数之前执行. { /*构造代码块的代码*/ } 给所有的对象统一的初始化,而构造函数只是给特定的对象初始化,因为构造函数可以重 ...
随机推荐
- C#在Winform程序中显示QQ在线状态
首先,引入必要的命名空间 using System.Windows.Forms; using System.Net; 其次,在Form中拖入一个PictureBox控件,并设置其SizeMode为A ...
- ark是什么
https://github.com/QuadHex/ARK/releases 0.8.0版本网络使用evpp 调用 https://www.jianshu.com/p/9f09928829ba
- Spring PropertyResolver 占位符解析(二)源码分析
Spring PropertyResolver 占位符解析(二)源码分析 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) ...
- iphone手机safari浏览器访问网站滚动条不显示问题解决办法
近排有公司同事出差在外需使用OA系统,发现iphone手机safari浏览器在该出现滚动条的页面没有显示滚动条,导致无法正常使用. 系统前端页面是采用jeasyui搭建的框架,使用iframe变更主页 ...
- php与html代码的若干转换
以前懵懵懂懂的看过,没怎么在意,现在总结一下 一般来说,像留言板之类的content,用这样的就够了: $content=addslashes(htmlspecialchars($_POST['con ...
- 使用xtrabackup备份innodb引擎的数据库
innodb引擎的数据库可以使用mysqldump备份,如果表很大几十个G甚至上百G,显示用mysqldump备份会非常慢.然后使用xtrabackup 可以很快的在线备份innodb数据库.Inno ...
- 类似 QQ 音乐底部常驻播放栏(AVQueuePlayer)
一开始搞了个基类,但是这样所有类都要继承它才可以.后来考虑把他加到 window 上.但是在 appdelegate 中没有办法可以加到上面,最后在 keyWindow 的rootViewContro ...
- sqlserver的substring详细用法
SQL 中的 substring 函数是用来截取一个栏位资料中的其中一部分. 例如,我们需要将字符串'abdcsef'中的‘abd’给提取出来,则可用substring 来实现: select sub ...
- Codeforces Round #510 (Div. 2) D. Petya and Array(离散化+反向树状数组)
http://codeforces.com/contest/1042/problem/D 题意 给一个数组n个元素,求有多少个连续的子序列的和<t (1<=n<=200000,abs ...
- boost--signal
1.signals2库 signals2库实现了线程安全的观察者模式,在signals2中观察者模式被称为信号/插槽(signals/slots),它是一种函数回调机制.一个信号可以关联一个或多个插槽 ...