这一节我们简单的说几个在使用构造函数时须要注意的细节。

通过我们前几节的学习,我们对构造函数有了一个比較清楚的认识,当我们在创建对象时。我们会调用构造函数。那么我们在定义和调用构造函数时。须要注意哪些细节呢?



第一个须要注意的细节:构造函数与set方法

看两个函数代码:

class Person
{
private String name;
private int age;
//构造函数,初始化name
Person(String n)
{
name = n;
System.out.println(name+"age"+age);
}
//一般函数,设置name
public void setName(String n)
{
name = n;
}
}

我们看到上面有两个函数,第一个是构造函数,第二个是一般方法,它们两个都是为设置name的内容,那么我们能不能用构造函数取代set方法呢,非常显然。这是不行了,由于我们之前已经学习了构造函数和一般函数的差别。而set方法就是一个一般函数。

构造函数在这里仅仅是对name进行了一次初始化,之后就不再作用了。而set方法当我们须要更改名字的不论什么时候都能够调用。

第二个须要注意的细节:构造函数能够调用一般函数,可是一般函数不能够直接调用构造函数。

我们来看样例:

class Person
{
private String name;
private int age;
//构造函数。初始化name
Person(String n)
{
setName(n);
System.out.println(name+":"+age);
}
//一般函数。设置name
public void setName(String n)
{
name = n;
}
}

编译通过。我们来測试一下

class PersonTest
{
public static void main(String[] args)
{
Person p = new Person("小强");
}
}

结果:

非常显然构造函数中调用一般函数是能够的。

当我们在set方法中调用构造函数:

class Person
{
private String name;
private int age;
//构造函数,初始化name
Person(String n)
{
name = n;
System.out.println(name+":"+age);
}
//一般函数,设置name
public void setName(String n)
{
Person(n);
name = n;
}
}

结果:

我们看到编译直接通只是,所以说一般函数中是不能直接调用构造函数的。

第三个须要注意的细节:与类名同名的一般方法

我们看这样一个函数:

class Person
{
private String name;
private int age; void Person(String n)
{
name = n;
System.out.println(name+":"+age);
}
}

測试:

class PersonTest
{
public static void main(String[] args)
{
Person p = new Person("小强");
}
}

结果:

我们看到提示说无法将构造函数应用到给定类型。实际没有參数,但我们的代码中有參数“小强”,也就是说我们创建对象用的函数不是构造函数。而是一个一般函数,程序没有在Person类中找到对应的构造函数,由于我们的代码中未定义构造函数,那么就仅仅有默认构造函数,而默认构造函数是没有不论什么參数的。

所以我们在以后的编程过程中一定要注意这样的现象。

第四个须要注意的细节:构造函数中有return语句。

我们看代码说明问题

class Person
{
private String name;
private int age; Person(String n,int a)
{
if(a<0)
{
System.out.println("初始化不合法! ");
return;
}
name = n;
age = a
System.out.println(name+":"+age);
return ;//我们在函数那里学习了。没有返回值的函数中的return语句是能够省略的
}
}

我们来測试一下

class PersonTest
{
public static void main(String[] args)
{
Person p = new Person("小强",-1);
}
}

结果:

我们发现了程序编译通过而且执行正常。return语句跳出构造函数,那么也就是说构造函数中有return语句。

这一节我们学习了四个构造函数中常常须要注意的细节,在以后的编程过程中我们多多注意。

[javase学习笔记]-7.5 构造函数须要注意的几个细节的更多相关文章

  1. [javase学习笔记]-7.2 构造函数与一般函数的差别

    这一节我们简单学习一下构造函数与一般函数之间的差别所在. 那么它们有什么差别呢,结合上一节,我们能够总结出下面两点差别: 第一个差别: 构造函数:对象创建时,就会调用与之相应的构造函数,对对象进行初始 ...

  2. javaSE学习笔记(16)---网络编程

    javaSE学习笔记(16)---网络编程 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机 ...

  3. JavaSE学习笔记(8)---常用类

    JavaSE学习笔记(8)---常用类 1.Object类 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类 ...

  4. JavaSE学习笔记(2)---面向对象基础

    JavaSE学习笔记(2)---面向对象基础 1.面向对象具有三大特征:封装性.继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能.所以面向对象 ...

  5. javaSE学习笔记(17)---锁

    javaSE学习笔记(17)---锁 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读 ...

  6. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

  7. JavaSE学习笔记(14)---File类和IO流(字节流和字符流)

    JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...

  8. JavaSE学习笔记(13)---线程池、Lambda表达式

    JavaSE学习笔记(13)---线程池.Lambda表达式 1.等待唤醒机制 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用 ...

  9. JavaSE学习笔记(12)---线程

    JavaSE学习笔记(12)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...

随机推荐

  1. 【2017 Multi-University Training Contest - Team 7】Kolakoski

    [Link]:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1011&cid=765 [Description] 有一种 ...

  2. RFID的基本组织构成

    RFID技术由3大组件构成, 包括: 阅读器.天线.标签三大组件. 阅读器 为RFID系统最重要也是最复杂的一个组件.因其工作模式一般是主动向标签询问标识信息, 所以有时又被称为询问器(Interro ...

  3. python之经典猜数字

    题目:猜数字1.让用户输入1-20,猜数字,可以猜5次.2.每次有提示,大了,或者小了!3.如果超过5次,提示game over. # !/usr/bin/env python # -*- codin ...

  4. Java Web学习总结(14)——JSP基础语法

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...

  5. asp.net--TextBox属性全研究

    . .aspx代码例如以下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="T ...

  6. Windows下编译OpenSSL(使用VS2013)

    简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...

  7. (转)bat批处理的注释语句

    在批处理中,段注释有一种比较常用的方法: goto start = 可以是多行文本,可以是命令 = 可以包含重定向符号和其他特殊字符 = 只要不包含 :start 这一行,就都是注释 :start 另 ...

  8. Kinect开发笔记之三Kinect开发环境配置具体解释

            0.前言:        首先说一下我的开发环境,Visual Studio是2013的,系统是win8的64位版本号,SDK是Kinect for windows SDK 1.8版本 ...

  9. swift开发网络篇—NSURLConnection基本使用

    iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据 ...

  10. docker安装及问题处理

    1.在Ubuntu的命令行中输入 sudo apt-get install docker.io 2.如果切换到了root用户下 apt-get install docker.io 3.对于新安装的Ub ...