构造方法,用于对象的初始化,在创建对象时被自动调用的特殊方法。构造方法名称与类名一致,通过new调用。

下面通过代码来详细讲解

 public class Point {
int x, y;
public Point(int _x, int _y){
x = _x;
y = _y;
} public double getDistance(Point p){
return Math.sqrt(Math.pow((double)(p.x), 2) + Math.pow((double)(p.y), 2));
} public static void main(String args[]){
Point n = new Point(3, 4);
System.out.println(n.getDistance(p));
}
}

首先构造方法与类名一致,主要用于对象初始化用new调用,构造方法会自动返回对象,故最后不能加return (对象)。

这里大家可能会有疑问

1.这个和之前创建好了一个类(public class point{....}),然后直接Point n = new Point(); 的区别,

2.构造方法和类名称相同创建类的时候到底是哪一个?

这里要补充一点

如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加。

下面代码来说明这个问题

 public class Point {
int x, y;
Public Point(); //这时我们平常创建类及对象的形式,没有定义构造方法,编译器会自动定义一个无参的构造函数。
//这里面隐含了一个构造函数,是编译器自动添加的,只是不显示出来。
public static void main(String args[]){
Point p = new Point(); }
}

所以我们如果在里面我们自己在类里面添加了一个有参的构造方法,那么对象初始化时使用的就是那个有参的构造方法。

可能这里大家会问,那我初始化时用那种无参的方法初始化可不可以,答案是不行的,因为之前说了“如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加。”,我们在里面定义了一个有参的构造方法,所以编译器不会帮我们自动添加无参的构造方法。这时如果你想用无参的构造方法初始化则需要再定义一个无参的构造方法。

例如

 public class Point {
int x, y;
public Point(int _x, int _y){
x = _x;
y = _y;
}
public Point(){ } public double getDistance(Point p){
return Math.sqrt(Math.pow((double)(p.x), 2) + Math.pow((double)(p.y), 2));
} public static void main(String args[]){
Point p = new Point(3, 4);
Point n = new Point();
System.out.println(n.getDistance(p));
System.out.println(p.getDistance(p));
}
}

这样就既可以创建有参也可以创建无参的,大家这里可能又会有疑问,这里面有两个构造方法名称都相同,初始化时到底是哪一个方法?

这里就涉及到另外一个概念“重载”,重载就是编译器会根据函数参数的个数,类型自动选择合适方法。

上图代码中的对象p的初始化方法中有两个参数,编译器会在两个Point方法中寻找合适的方法去执行,同样对n进行初始化的方法没有参数,编译器也会根据参数类型,个数去选择合适的方法。

java中函数的重载和这类似

构成重载的条件

方法名相同,参数个数不同,构成重载。
方法名相同,参数类型不同,构成重载。

方法名相同,参数类型相同,参数个数相同,返回值不同,不构成重载。

简而言之,就是编译器根据参数个数类型,寻找对应方法时应具有唯一性。

1.3(java学习笔记)构造方法及重载的更多相关文章

  1. Java学习笔记之方法重载,动态方法调度和抽象类

    一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程 ...

  2. Java学习笔记之——方法重载

    方法重载: overload 1. 方法签名 组成:方法名(参数列表) 参数列表不同分为哪些情况? (1)有无参数 (2)参数的类型 (3)参数的个数 (4)参数的顺序(前提是类型不一样) 2.方法重 ...

  3. Java学习笔记之方法重载

    被重载的方法必须具有不同的参数列表.不能基于不同修饰符或返回值类型来重载方法. package welcome; public class TestMethodOverloading { public ...

  4. Java学习笔记day05_方法重载

    1.方法的重载overload 在同一个类中, 允许出现同名的方法, 只要方法的参数列表不同即可. 参数列表不同: 参数个数不同, 参数类型不同, 顺序不同. public class MethodO ...

  5. Java学习笔记之---构造方法

    Java学习笔记之---构造方法 (一)构造方法的特性 构造方法不能被对象单独调用 构造方法与类同名且没有返回值 构造方法只能在对象实例化的时候被调用 当没有指定构造方法时,系统会自动添加无参的构造方 ...

  6. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  7. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  8. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  9. java学习笔记7--抽象类与抽象方法

    接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...

  10. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

随机推荐

  1. Java多线程1:Java中sleep,wait,yield,join的区别

    1.sleep()方法 在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”.不推荐使用. sleep()使当前线程进入阻塞状态,在指定时间内不会执行. 2.wait()方法 在其他线程调用 ...

  2. ppk和pem证书互转

    首先你得去下载个putty pem:通用证书格式 ppk:为putty下面的专有格式     pem->ppk 直接通过putty下的puttygen.exe 选的Load private ke ...

  3. SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释

    这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文件并没有进行过多的说明,很多人知其然不知其所以然,经过几天的搜索和整理,今天总算对其中的XML配置文件有了一定的了解,所以拿 ...

  4. 【BZOJ2223&&3524】PATULJCI [主席树]

    PATULJCI Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description Input 第一行两个整数 ...

  5. 「6月雅礼集训 2017 Day2」B

    [题目大意] 求n*n的棋盘,每行每列都有2个黑格子的方案数. n<=10^7 [题解] zzq的做法好神奇啊 行列建点,二分图 左边有i个点,右边有j个点的方案数 f[i,j] 左边有i个点, ...

  6. 25个常规方法优化你的jquery代码

    原文发布时间为:2011-06-06 -- 来源于本人的百度文章 [由搬家工具导入] http://www.tvidesign.co.uk/blog/improve-your-jquery-25-ex ...

  7. MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致

    MyBatis系列二  之   数据库列名于程序实体类中字段名称不一致 情景:当数据库中的列名与我们程序实体类中的字段名称不一致         使用ResultMap节点配置信息  在映射文件中  ...

  8. 【洛谷 P1667】 数列 (贪心)

    题目链接 对于一个区间\([x,y]\),设这个区间的总和为\(S\) 那么我们在前缀和(设为\(sum[i]\))的意义上考虑到原操作其实就是\(sum[x−1]+=S\) , \(sum[x]+S ...

  9. BZoj 1003 物流运输 DP+最短路

    2013-09-11 09:56 W[I]代表前I天能取得的最小花费,假设在第J天更改一次路线,那么如果有 W[I]>W[J]+第j+1到第I天的最小花费+更改路线的花费(K) 那么更新W[I] ...

  10. C++11 自动释放锁(转)

    原文转自 https://blog.csdn.net/lmb1612977696/article/details/77712170 c++11加入了很多新的特性,值得我们去探索. 先看一个例子:普通的 ...