构造器Constructor

ABAP 类构造器全拆解:CONSTRUCTOR vs CLASS_CONSTRUCTOR 在 ABAP 对象模型中,每个类都隐式拥有两种构造器:实例构造器与静态构造器。不显式声明也存在;显式声明后,才能实现自定义逻辑。在类第一次被访问之前会自动执行,且在每个 internal session 里仅执行一次;访问类的行为包括创建实例或访问静态组件,但访问类型与常量不会触发该静态构造器。与之对应,是实例级初始化逻辑:在每次或NEW创建对象之后立刻执行,而且无法显式直接调用(唯一的例外是子类里显式调用文档也强调了实例构造器在子类化下的规则与限制。相当于类级单次启动脚本。 阅读详情

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

构造器用来确保每个对象都会得到初始化。当对象被创建时,如果该类具有构造器,java就会在用户有能力操作对象之前自动调用相应的构造器,所以保证了初始化地进行。在java中创建和初始化被捆绑在了一起,两者不能分离。注意构造器没有返回值,与返回值为空(void)明显不同。如果不想被实例化,可以将构造函数声明为private类型。

定义一个Java类时,如果没有显式定义一个不带参数的构造函数,则可以用不带参数的构造函数创建一个该类的实例。如果没有显式定义一个不带参数的构造函数但定义了一个带参数的构造函数,则不能再以不带参数的构造函数创建一个该类的实例:[即如果已经定义了一个构造函数(无论有无参数),编译器就不会帮你自动创建缺省构造函数]

这里提到this关键字,它只能在方法内部使用,表示对“调用方法的那个对象”的引用。可以使用this关键字在构造器中调用构造器。例:

Public class Flower{

Static Test monitor=new Test();

Int petalCount=0;

String s=new String(“null”);

Flower(int petals){petalCount=petals;}

Flower(String ss){S=ss;}

Flower(String s,int petals){

This(petals);

//This(s); 这里是不允许的,因为尽管可以用this调用一个构造器,但是不能调用2个

This.s=s;}

}

public class A {

    public A(String s) {    }

    public static void main(String[] args) {

        A a = new A();  // Incorrect,抱错显示没有找到匹配的构造器

        A a = new A("a"); //Correct

    }}

所有类都是继承于Object的,在所有类实例化为对象的时候,必然会先调用Object的默认构造函数。static方法就是没有this的方法,static方法内部不能调用非静态方法。如果一个类的构造函数是静态的,那么它将无法调用Object的构造函数。因此构造函数不能声明为static类型。如果你想让一个类的对象只有指定的静态方法可以返回,你可以这样。  

  class   Test {  

          private   Test(){ }//私有构造方法,这样外部将无法创建此类的对象。联想单例模式    

          public static Test getNewTest(){  

                  return new Test();   //静态公共方法,返回Test的对象。  

          }  }

 (1) 类可以没有构造方法,但如果有多个构造方法,就应该要有默认的构造方法,否则在继承此类时,需要在子类中显式调用父类的某一个非默认的构造方法了。(2) 在一个构造方法中,只能调用一次其他的构造方法,并且调用构造方法的语句必须是第一条语句。

   一个类继承了另一个类的内部类,因为超类是内部类,而内部类的构造方法不能自动被调用,这样就需要在子类的构造方法中明确的调用超类的构造方法。 

class C extends A.B { 

C() {  new A().super(); // 这一句就实现了对内部类构造方法的调用。 

}} 

构造方法也可这样写: 

C(A a) {

a.super(); 

} // 使用这个构造方法创建对象,要写成C c = new C(a); a是A的对象。 

-------------------------------------------------------------------------------------------------------------------------易错题:

class A {

public int Avar;

public A() {

System.out.println("AAA");

doSomething();

}

public void doSomething() {

Avar = 1111;

System.out.println("A.doSomething()");

}

}

 

public class B extends A {

public int Bvar = 2222;

public B() {

System.out.println("BBB");

doSomething();

System.out.println("Avar=" + Avar);

}

public void doSomething() {

System.out.println("Bvar=" + Bvar);

}

public static void main(String[] args) {

new B();

}

}

顺序是这样得,首先生成B就得先生成A,所以调用A的构造器,输出AAA,然后调用方法dosomething,注意:A的该方法被B覆盖,而你生成的是B的对象,所以它调用B的方法,由于BVAR目前没有给定值,所以自动初始化为0;

然后生成B对象,先初始化变量BVAR,然后调用构造器输出BBB,然后调用方法,这时BVAR已初始化,所以输出BVAR=2222,而对象A中变量AVAR由于没有调用对象A的方法dosomething,所以其值为0,则输出0

全部输出就如下:

AAA

Bvar=0

BBB

Bvar=2222

Avar=0

注意:初始化顺序,当继承时,先生成超类对象,生成对象时,先生成静态变量,然后是一般变量,然后调用构造器!当所有超类对象生成后,生成本对象,顺序一样! 当方法被覆盖时,调用目前对象的方法!这得注意。

【数据同化第一期】基本概念介绍 阅读详情

相关推荐

On the convergence of FedAvg on non-iid data

On the convergence of FedAvg on non-iid data

Lyn_S的博客 7081

Java与C#语法对比及转换

Java (J2SE 5.0) and C# ComparisonThis is a quick reference guide to highlight some key syntactical differences between Java and C#. This is by no means a complete overview of either language. Hope you

Eray的专栏 2442

VScode搭建Opencv(C++开发环境)

VScode配置Opencv一、准备软件二 、下载软件1、MinGw下载2、 Cmake下载3、Opencv下载三、编译1、cmake-gui2、make3、install四、 VScode配置1、launch.json2、c_cpp_properties.json3、tasks.json五、测试 用了半天事件,看了各种的博客终于配置成功了,在这里记录并分享一下,让更多的人少走弯路。 本次环境是Win 10. 一、准备软件 我们本次用到的3个软件,(建议读者文件路径,文件版本 尽量都和我相同,这样不容易出错

河旬的博客 8万+

constructor构造器

constructor是每一个实例对象都拥有的属性,而这个属性也相当于是一个指针,它指向于创建当前对象的对象 //两种方式创建对象是否有区别(没有区别) var o={}; var p=new Object(); console.log(o.constructor);//[ Object] console.log(p.constructor);//[ Object] console.log(o...

liuhua_2323的博客 264

SCCM实战指南:从零搭建企业级Windows自动化部署平台

本文提供了一份详细的SCCM实战指南,手把手教你从零搭建企业级Windows自动化部署平台。内容涵盖环境规划、AD架构扩展、SQL Server配置、SCCM主站点安装,以及最终实现操作系统镜像的自动化部署,旨在帮助IT管理员彻底告别手动装机,实现高效、规范的Windows设备批量管理。

weixin_29251337的博客 638

保姆级避坑指南:在Ubuntu 22.04上用ROS2 Humble搞定TurtleBot3的SLAM与导航(附5个常见报错解决方案)

本文提供了一份详细的Ubuntu 22.04上使用ROS2 Humble和TurtleBot3进行SLAM建图与导航的避坑指南,涵盖Gazebo启动失败、场景加载问题、环境变量设置、GLIBCXX版本冲突及Nav2参数配置等5个常见报错的解决方案,帮助开发者高效完成机器人导航项目。

weixin_29062823的博客 286

构造器Constructor是否可被override?

  构造器Constructor是否可被override?   构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 转载于:https://www.cnblogs.com/zhaozhaozhang/p/5819459.html...

weixin_33877885的博客 93

AMSR-2数据下载实战:从JAXA到LPRM的算法选择与效率优化

本文详细介绍了AMSR-2数据的下载实战,重点对比了JAXA与LPRM算法的差异及适用场景,并提供了高效下载方案和网络优化策略。通过实际案例和代码示例,帮助用户快速获取和处理AMSR-2数据,提升研究效率。

rl6adventurer的博客 691

4.构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。Constructor不能被继承,所以Constructor也就不能被override。每一个类必须有自己的构造函数,负责构造自己这部分的构造。子类不会覆盖父类的构造函数,相反必须负责在一开始调用父类的构造函数。一、构造器是干什么用的?(what)     构造器是用来生成一个类的实例是用来初始化这...

srjzh的博客 664

YOLOv13改进策略【Head】| (独家改进)结合 ICME-2024 中的PPA注意力模块,自研带有注意力机制的小目标检测头

本文记录的是利用PPA (并行补丁感知注意模块)改进YOLOv13的检测头。通过改进传统卷积,形成带有注意力机制的小目标检测头,使模型能够更好地关注小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch size参数实现局部和全局分支的区分,计算非重叠

Limiiiing的博客 480

Python 爬虫进阶:淘宝热卖商品价格走势抓取、反爬与分析全流程

在大数据时代,数据是商业决策的重要依据。电商平台上的商品价格走势,对于商家调整经营策略、消费者选择购买时机都有着关键的参考价值。本篇文章将深入解析如何利用 Python 爬虫抓取淘宝热卖商品的价格走势数据,并应对其中的反爬机制,最后对数据进行分析,带领大家领略 Python 爬虫在电商领域的强大应用。

yansideyucsdn的博客 1058

构造器Constructor 是否可被override

构造器 Constructor 是否可被 override 在讲继承的时候我们就知道父类的私有属性和构造方法并不能被继承,所以 Constructor 也就不能被 override(重写),但是可以 overload(重载),所以 你可以看到一个类中有多个构造函数的情况。 ...

建仔的博客专栏 577

6、探索音乐结构中的统一性:贝多芬《英雄交响曲》第一乐章的深度剖析

本文深入剖析了贝多芬《英雄交响曲》第一乐章的音乐结构,探讨其统一性的来源及表现形式。通过主题与动机、和声与调性、旋律与节奏、织体与动态等多方面的分析,揭示了这部作品在技术层面和情感表达上的卓越成就。

b9c0d的博客 518

react中constructor构造器的使用

react的constructor构造器中的使用 在react类组件内使用constructor构造器一般两种用途,应在其他语句之前使用super(props),否则在构造器内若要获取this.props会出现未定义。 对state状态进行初始赋值 在constructor内不应使用setState来改变state,应直接对this.state进行赋值 class Person extends React.Components { constructor(props){ super(props)

PengPeng1020的博客 1191

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

21.构造器Constructor是否可被override?

21.构造器Constructor是否可被override? 构造器不是方法,那么用来修饰方法特性的所有修饰符都不能用来修饰构造器(并不等于构造器不具备这些特性,虽然不能用static修饰构造器,但它却有静态特性)构造器只能用 public private protected这三个权限修饰符,且不能有返回语句。

evilcry2012的专栏 578

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

构造器constructor

也是一种方法,类里面只有属性和方法 只用来构造该类的属性,只能通过new 【修饰符】类名啦(形参列表){ } 比如:public car(){} 虽然有返回值,但是不能定义返回类型,不能在构造器写return.如果没有定义构造器,编译器会自动生成一个构造器 构造器的方法必须和类名一致。 作用:构造该类的对象,初始化对象的属性。 重载:一个类可以定义有相同的名字,但参

DDFFR的博客 649

java的构造器Constructor的理解

使用构造器时需要记住: 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个、1个或1个以上的参数 4.构造器没有返回值 5.构造器总是伴随着new操作一起调用 6.不添加任何构造器会默认有空的构造器 继承与构造器 使用super调用父类构造器的语句必须是子类构造器的第一条语句 为什么加上sup

HelloWorld 1万+

Java反射07 : 构造器Constructor学习示例

超级通道: Java泛型学习系列-绪论 java.lang.reflect.Constructor类提供了用于获取和操作构造器的静态方法。 1.通过Constructor可以做什么 通过Constructor可以做以下事情: 如何通过Class对象获取Constructor?如何通过Constructor对象获取Class? 如何通过Constructor获取构造器的相关信息如:造器...

韩超的博客 (hanchao5272) 2972

构造器Constructor是否可被override

构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。 重载,重写所解释的网址:重载,重写

wangpengji的博客 256

构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

weixin_34064653的博客 196

34、构造器Constructor是否可被override?

34、构造器Constructor是否可被override? 构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 JAVA面试问题及答案大全

kaszxc的博客 343

3、反射:获取Class类的构造器对象Constructor

获取Class类的构造器对象Constructor

Garry 367

构造器constructor是否可被override

构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。 Constructor不能被继承,所以Constructor也就不能被override。每一个类必须有自己的构造函数,负责构造自己这部分的构造。子类不会覆盖父类的构造函数,相反必须负责在一开始调用父类的构造函数。 一、构造器是干什么用的?(what) 构造器是用来生成一个类的实例是用来初始化这个...

ZJC'博客 1913

【Java】〖反射机制〗Constructor构造器对象

〖反射机制〗Constructor构造器对象 创建对象 构造器对象.newInstance() package test; import java.lang.reflect.Constructor; public class Test { public String a; protected String b; String c; private String d; public Test() {} public Test(String a

Need not to know 202
上一篇: webservice调用方式http和soap的区别
下一篇: finally块的问题(finally block does not complete normally)
luckarecs
博客等级 码龄17年 118粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值