构造器 &&方法

Java构造器和方法的区别 摘要   要学习Java,你必须理解构造器。因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆。但是,构造器和方法又有很多重要的区别。   原作者:Robert Nielsen 原站:www.javaworld.com   我们说构造器是一种方法,象讲澳大利亚的鸭嘴兽是一种哺育动物。(按:老外喜欢打比喻,我也照着翻译)。要理解鸭嘴兽,那么先必须理解它和其他哺育动物的区别。同样地,要理解构造器,那么要了解构造器和方法的区别。所有学习java的人,尤其是对那些要认证考试的,理解构造器是非常重要的。下面将简单介绍一下 ,后用一个表作了些简单的总结。   功能和作用的不同   构造器是 立即下载

转

 

作者tag:java基础 优快云 推荐tag:编译器 代码 命名 

构造器和方法的区别
摘要
要学习Java,你必须理解构造器。因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆。但是,构造器和方法又有很多重要的区别。


我们说构造器是一种方法,就象讲澳大利亚的鸭嘴兽是一种哺育动物。(按:老外喜欢打比喻,我也就照着翻译)。要理解鸭嘴兽,那么先必须理解它和其他哺育动物的区别。同样地,要理解构造器,那么就要了解构造器和方法的区别。所有学习java的人,尤其是对那些要认证考试的,理解构造器是非常重要的。下面将简单介绍一下 ,最后用一个表作了些简单的总结。

功能和作用的不同
构造器是为了创建一个类的实例。这个过程也可以在创建一个对象的时候用到:Platypus p1 = new Platypus();

相反,方法的作用是为了执行java代码。

修饰符,返回值和命名的不同
构造器和方法在下面三个方便的区别:修饰符,返回值,命名。和方法一样,构造器可以有任何访问的修饰: public, protected, private或者没有修饰(通常被package 和 friendly调用). 不同于方法的是,构造器不能有以下非访问性质的修饰: abstract, final, native, static, 或者 synchronized。

返回类型也是非常重要的。方法能返回任何类型的值或者无返回值(void),构造器没有返回值,也不需要void。

最后,谈谈两者的命名。构造器使用和类相同的名字,而方法则不同。按照习惯,方法通常用小写字母开始,而构造器通常用大写字母开始。构造器通常是一个名词,因为它和类名相同;而方法通常更接近动词,因为它说明一个操作。

"this"的用法
构造器和方法使用关键字this有很大的区别。方法引用this指向正在执行方法的类的实例。静态方法不能使用this关键字,因为静态方法不属于类的实例,所以this也就没有什么东西去指向。构造器的this指向同一个类中,不同参数列表的另外一个构造器,我们看看下面的代码:

public class Platypus {

String name;

Platypus(String input) {
name = input;
}

Platypus() {
this("John/Mary Doe");
}

public static void main(String args[]) {
Platypus p1 = new Platypus("digger");
Platypus p2 = new Platypus();
}
}

在上面的代码中,有2个不同参数列表的构造器。第一个构造器,给类的成员name赋值,第二个构造器,调用第一个构造器,给成员变量name一个初始值 "John/Mary Doe".

在构造器中,如果要使用关键字this,那么,必须放在第一行,如果不这样,将导致一个编译错误。

"super"的用法
构造器和方法,都用关键字super指向超类,但是用的方法不一样。方法用这个关键字去执行被重载的超类中的方法。看下面的例子:

class Mammal {
void getBirthInfo() {
System.out.println("born alive.");
}
}

class Platypus extends Mammal {
void getBirthInfo() {
System.out.println("hatch from eggs");
System.out.print("a mammal normally is ");
super.getBirthInfo();
}
}

在上面的例子中,使用super.getBirthInfo()去调用超类Mammal中被重载的方法。

构造器使用super去调用超类中的构造器。而且这行代码必须放在第一行,否则编译将出错。看下面的例子:

public class SuperClassDemo {
SuperClassDemo() {}
}

class Child extends SuperClassDemo {
Child() {
super();
}
}

在上面这个没有什么实际意义的例子中,构造器 Child()包含了 super,它的作用就是将超类中的构造器SuperClassDemo实例化,并加到 Child类中。

编译器自动加入代码
编译器自动加入代码到构造器,对于这个,java程序员新手可能比较混淆。当我们写一个没有构造器的类,编译的时候,编译器会自动加上一个不带参数的构造器,例如:public class Example {}
编译后将如下代码:

public class Example {
Example() {}
}


在构造器的第一行,没有使用super,那么编译器也会自动加上,例如:

public class TestConstructors {
TestConstructors() {}
}

编译器会加上代码,如下:

public class TestConstructors {
TestConstructors() {
super;
}
}

仔细想一下,就知道下面的代码

public class Example {}

经过会被编译器加代码形如:

public class Example {
Example() {
super;
}
}

继承

构造器是不能被继承的。子类可以继承超类的任何方法。看看下面的代码:

public class Example {
public void sayHi {
system.out.println("Hi");
}

Example() {}
}

public class SubClass extends Example {
}

类 SubClass 自动继承了父类中的sayHi方法,但是,父类中的构造器 Example()却不能被继承。

总结

主题构造器方法
功能建立一个类的实例java功能语句
修饰不能用bstract, final, native, static, or synchronized能
返回类型没有返回值,没有void有返回值,或者void
命名和类名相同;通常为名词,大写开头通常代表一个动词的意思,小写开头
this指向同一个类中另外一个构造器,在第一行指向当前类的一个实例,不能用于静态方法
super调用父类的构造器,在第一行调用父类中一个重载的方法
继承构造器不能被继承方法可以被继承
编译器自动加入一个缺省的构造器自动加入(如果没有)不支持
编译器自动加入一个缺省的调用到超类的构造器自动加入(如果没有)不支持




Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=474681


[ 收藏到我的网摘]   victorWu发表于 2005年09月08日 09:46:00
 
ROS——无人机ROS仿真包 rotors_simulator 编译教程 文章目录 安装wstool sudo apt install python3-wstool 创建ROS工程 $ mkdir -p ~/UAV/src $ cd ~/UAV/src $ catkin_init_workspace # initialize your catkin workspace $ wstool init 下载源码 git clone git@github.com:ethz-asl/rotors_simulator.git 源码链接: https://github.com/eth 阅读详情

相关推荐

clang-tidy 使用指南

clang-tidy 需要一个编译数据库来了解如何编译你的代码。编译数据库通常是一个名为 compile_commands.json 的文件。在这个示例中,clang-tidy 会对 test.cpp 文件进行分析,并报告任何潜在的问题。例如,它可能会警告 test 函数中的未使用变量 x。clang-tidy 是一个用于 C++ 代码的静态分析工具,可以帮助你发现代码中的潜在问题和改进点。这将在 build 目录中生成一个 compile_commands.json 文件。

weixin_42244181的博客 2362

JAVA/JSP学习系列之九(理解构造器)

解构造器 构造器和方法的区别 摘要要学习Java,你必须理解构造器。因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆。但是,构造器和方法又有很多重要的区别。原作者:Robert Nielsen 原站:www.javaworld.com 我们说构造器是一种方法,就象讲澳大利亚的鸭嘴兽是一种哺育动物。(按:老外喜欢打比喻,我也就照着翻译)。要理解鸭嘴兽,那么先必须理解它和其他哺育动物的区别。同

!Java 1916

yolov5部署之七步完成tensorRT模型推理加速

目录前言step 1. 下载yolov5源码以及tensorrtx源码,并将yolov5s.pt转为.wts模型step 2. 确定并下载自己准备使用的CUDA版本。step 3. 根据自己的CUDA版本下载对应版本的cuDNN以及TensorRTstep 4. 根据自己使用的VS版本下载对应版本的OpenCVstep 5. 安装CUDAstep 6. 安装cuDNN、TensorRT以及验证TensorRT是否安装成功 前言     前段时间研究了Pytorch的环境配置,之后便从github上下载了yo

Christo的博客 4万+

java中构造器和方法的区别

(1)功能和作用的不同    构造器是为了创建一个类的实例。这个过程也可以在创建一个对象的时候用到:Platypus p1 = new Platypus(); 相反,方法的作用是为了执行java代码。    (2)修饰符,返回值和命名的不同     构造器和方法在下面三个方便的区别:修饰符,返回值,命名。和方法一样,构造器可以有任何访问的修饰: public, protected, private

思索的蜗牛的专栏 1万+

如何解除Uniaccess管控??

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2389

【服务器电源架构与关键技术发展趋势】深度解析架构、方案、玩家与未来趋势

技术维度:台达 / 光宝在高功率密度(97%+ 效率)和垂直整合上领先,大陆厂商(麦格米特 / 欧陆通)在成本控制和快速响应上更优,国际厂商(英飞凌)聚焦核心器件突破。 客户维度:台达绑定英伟达核心供应链,麦格米特 / 欧陆通兼顾国内外客户,光宝 / 中恒电气侧重云端与互联网厂商。 趋势适配:所有厂商均加速布局 800V 高压架构、液冷技术和高功率 Power Shelf,以应对 AI 服务器单柜功率从 10kW→200kW 的升级需求。

昔时扬尘处 723

java构造器和方法_java构造器和方法的比较

功能和作用的不同构造器是为了创建一个类的实例。这个过程也可以在创建一个对象的时候用到:Platypus p1 = new Platypus();相反,方法的作用是为了执行java代码。修饰符,返回值和命名的不同构造器和方法在下面三个方便的区别:修饰符,返回值,命名。和方法一样,构造器可以有任何访问的修饰: public, protected, private或者没有修饰(通常被package 和 ...

weixin_42511255的博客 309

【AI黑话日日新】什么是AI Infra?

是支撑AI模型开发、训练、推理、部署与规模化运营的,是连接底层算力与上层AI应用的“数字基建”。没有高效的AI Infra,大模型训练、推理与落地都无法高效实现。

专注:太空算力、AI infra、异构调度、大模型成本工程 1106

Java中构造器(构造方法/Constructor)和方法的区别

构造方法≠方法 要区分Java中构造器(构造方法/Constructor)和方法的区别,需要掌握下面几个要点: 修饰符 构造器:不能用abstract、final、native、static修饰 方法:可以用各种修饰符修饰 返回值 构造器:无返回值,也无void 方法:有返回值,或返回void ※命名 构造器:和类名相同,首字母通常大写(名词居多) 方法:动词居多,首字母通常小写 this 构造器...

天射手座的博客 3718

[RK3568 Android11] 教程之原厂SDK源码适配AIO-3568J板子跑起来

目录 一、前提 二、修改dts设备树 三、适配板子的dts 四、编译系统烧入固件验证 一、前提 因源码是直接使用原厂的SDK,没有使用firefly配套的SDK源码,所以手上这块firefly aio-3568j板子在硬件设计上与原厂使用的板子会有些差异;就是因为这些差异会导致新固件烧入后,debug串口打印许多错误信息,可能的话,系统还会崩溃掉,跑不起来; 主要差异在哪里呢?比如: ● DDR类型和品牌多样性; ...

~未来可期~ 1744

内网渗透(二)之基础知识-工作组介绍

在一个大型单位里,可能有成百上千台计算机互相连接组成局域网,它们都会列在"网络"(网上邻居)内。如果不对这些计算机进行分组,网络的混乱程度是可想而知的 为了解决这一问题,产生了工作组( Work Group)这个概念。将不同的计算机按功能(或部 门)分别列入不同的工作组,例如技术部的计算机都列入"技术部"工作组、行政部的计算机都 列入"行政部"工作组。要想访问某个部门的资源,只要在"网络"里双击该部门的工作组名 就可以看到该部门的所有计算机了。相比不分组的情况,这样的情况有序得多(尤其对大型局域网来说)。

把自己活成一道光,因为你不知道,谁会借着你的光,走出了黑暗。请保持心中的善良,因为你不知道,谁会借着你的善良,走出了绝望。请保持你心中的信仰,因为你不知道,谁会借着你的信仰,走出了迷茫。请相信自己的力量,因为你不知道,谁会因为相信你,开始相信了自己.... 1219

函数式接口的实现方法之三:构造器引用 && 使用Comparator对数组排序

一、构造器引用 和方法引用类似,只不过方法名为new,如Interval::new就是Interval的构造器引用。 也可以用数组类型的构造引用,如int[]::new,它等价于 x->new int[x],一个参数指定数组大小。 构造引用可以为构造泛型数组提供方便,Java规定无法构造类型为T的数组,因为表达式new T[n]会被翻译成new Object[n]。例如,List<T>的toArray()方法只能返回Object数组,使...

padisah的博客 426

Centos 7 Linux 离线安装使用 MySQL 5.7:下载、安装、配置、使用

本文详细介绍了在 CentOS 7 系统下离线安装 MySQL 5.7 的完整流程,包括环境准备、安装包下载、用户与目录配置、数据库初始化、服务启动与自启设置、root 密码修改、远程访问开启及防火墙配置等关键步骤,并提供了本地与远程客户端(如 Navicat、DBeaver)的连接使用方法,适合无网络环境下的数据库部署参考。

寒水馨 · 轻量级技术文档 · hanshuixin.org 6112

面向对象 、构造器、封装 、继承 、super && this关键字、方法重写、多态 、instanceof、static 关键字、抽象类 abstract 、接口

abstract 修饰类 、修饰方法1、抽象类中可以没有抽象方法,但抽象方法的类一定要声明为抽象类2、抽象类:不能使用new关键字类创建对象,它是用来让子类继承的3、抽象方法:只有方法的声明,没有方法的实现,它是用来让子类实现的// 抽象类 extends单继承 public abstract class Action {

2202_75435809的博客 198

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java面向对象编程(3) 类中的五大成员:属性,方法,构造器,代码块,內部类 && 实例化对象时的执行顺序

类中的五大成员 属性 方法 构造器 代码块 內部类 public class ClassMembers { //属性 public String name; static { System.out.println("静态代码块"); } { System.out.println("非静态代码块"); } public ClassMembers() { System.out.println("无参构造器"); } public ClassMembers(Stri

北冥有鱼 267

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java中不再谈的问题

Java中不再谈的问题 (增加中) 这里列出的 是我不想再讨论的一些东西。和FAQ(frequently Answered Question)不同,讨论起来烦人。    11、为什么main方法必须用static修饰?A:public static void main(String[] s)是Java程序的起点。用static修饰的原因:无中生有。 

yqj2065的博客 1340

VC中sqlite的使用

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

Java基础知识(一)

可以使用 properties 类将想要全局有效的变量值写在 properties 文件中,那么在何处用时都从此properties 文件中读取这个变量的值就可以了,此值在任何时候都可以修改的。

mxzsybkj的博客 381

Java高级面试题【转】

第一,谈谈final, finally, finalize的区别。 final 如果一个类被声明为final,意味着它不能再派生出新的子类,因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能...

diaoyinji6441的博客 147

java面试题怎么背?java面试题有哪些?

每一个去面试java的人员,在面试之前都会看相关面试题,有的甚至还会将面试题背下来,心中有数之后就会更加有利于面试的通过,那java面试题怎么背?下面来我们就来给大家讲解一下。 java面试题不需要背,我们可以通过面试题来检测自己掌握知识点的程度,这样在面试时就会更加有信心! java面试题有哪些? 1、Java有没有goto? 答:goto 是Java中的保留字,在目前版本的Java中没有使用。(根据James Gosling(Java之父)编写的《The Java Programming Languag

javase1085的博客 1083

[转载]java基础知识

java基础知识第一,谈谈final, finally, finalize的区别。final 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 a...

congji3817的博客 70

java面试题

为什么80%的码农都做不了架构师?>>> ...

weixin_33831196的博客 440

Java基础知识总结(四)

此篇博文是总结一些Java面试题,以张孝祥老师的《Java面试宝典》为主 1、&与&&的区别   1)&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。   2)&&还具有短路的功能,即如果第一个表达...

weixin_30732487的博客 63

java我们知道的那点事

i++ ++i 如果有表达式 a = i++ 它等价于 a = i ; i = i + 1;        如果有表达式 a = ++i 它等价于   i = i + 1; a = i;        1 首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值 内链接 select e.*,t.* from emp e,dept t where e.deptno

Tazuka107的博客 298

JAVA32问

 JAVA 程序员面试 32 问 第一,谈谈 final, finally, finalize 的区别。 final 修饰符(关键字)如果一个类被声明为 final ,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为 final 的。将变量或方法声明为 final ,可以保证它们在使用中不被改变。被声

bingby的专栏 392

Java面试题及答案2019版(上),springboot缓存技术

System.out.println(a == c);     // true  a自动拆箱成int类型再和c比较 } } 最近还遇到一个面试题,也是和自动装箱和拆箱有点关系的,代码如下所示: public class Test03 { public static void main(String[] args) { Intege

m0_65441360的博客 305

JAVA程序员面试问题

第一,谈谈final, finally, finalize的区别。 final 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为fi...

meiowei的专栏 142
上一篇: 接口
下一篇: 如何输出文件的最后一行
Mircle_Wang
博客等级 码龄20年 5粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值