[javase学习笔记]-7.5 构造函数须要注意的几个细节
这一节我们简单的说几个在使用构造函数时须要注意的细节。
通过我们前几节的学习,我们对构造函数有了一个比較清楚的认识,当我们在创建对象时。我们会调用构造函数。那么我们在定义和调用构造函数时。须要注意哪些细节呢?
第一个须要注意的细节:构造函数与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 构造函数须要注意的几个细节的更多相关文章
- [javase学习笔记]-7.2 构造函数与一般函数的差别
这一节我们简单学习一下构造函数与一般函数之间的差别所在. 那么它们有什么差别呢,结合上一节,我们能够总结出下面两点差别: 第一个差别: 构造函数:对象创建时,就会调用与之相应的构造函数,对对象进行初始 ...
- javaSE学习笔记(16)---网络编程
javaSE学习笔记(16)---网络编程 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机 ...
- JavaSE学习笔记(8)---常用类
JavaSE学习笔记(8)---常用类 1.Object类 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类 ...
- JavaSE学习笔记(2)---面向对象基础
JavaSE学习笔记(2)---面向对象基础 1.面向对象具有三大特征:封装性.继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能.所以面向对象 ...
- javaSE学习笔记(17)---锁
javaSE学习笔记(17)---锁 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读 ...
- javaSE学习笔记(15) ---缓冲流、转换流、序列化流
javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...
- JavaSE学习笔记(14)---File类和IO流(字节流和字符流)
JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...
- JavaSE学习笔记(13)---线程池、Lambda表达式
JavaSE学习笔记(13)---线程池.Lambda表达式 1.等待唤醒机制 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用 ...
- JavaSE学习笔记(12)---线程
JavaSE学习笔记(12)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...
随机推荐
- 洛谷 P1109 学生分组
P1109 学生分组 题目描述 有N组学生,给出初始时每组中的学生个数,再给出每组学生人数的上界R和下界L(L<=R),每次你可以在某组中选出一个学生把他安排到另外一组中,问最少要多少次才可以使 ...
- [React] Call setState with null to Avoid Triggering an Update in React 16
Sometimes it’s desired to decide within an updater function if an update to re-render should be trig ...
- shell-查看手机分辨率
使用如下命令,可以查看手机分辨率 adb shell dumpsys window displays 运行结果如下 Display: mDisplayId= init=1080x1920 480dpi ...
- 11. ZooKeeper之启动、停止服务。
转自:https://blog.csdn.net/en_joker/article/details/78673607 启动服务 首先我们来看下如何启动ZooKeeper服务.常见的启动方式有两种. J ...
- HTML基础第三讲---字体
转自:https://i.cnblogs.com/posts?categoryid=1121494 同样我们在这里继续讲一下它的body,因为它能直观的让大家观察到你所学到的成果. 这一讲,我们来学习 ...
- Quick Sort Algorithm
快速排序算法实现代码: //============================================================================ // Name : ...
- visual studio code 中 debugger for chrome 插件的配置
安装 debugger for chrome 插件后,把默认的 launch.json 改成: { "name": "谷歌浏览器", "type&qu ...
- 2.Docker初体验【Docker每天5分钟】
原文:2.Docker初体验[Docker每天5分钟] Docker给PaaS世界带来的“降维打击”,其实是提供了一种非常便利的打包机制.该机制打包了应用运行所需要的整个操作系统,从而保证了本地环境和 ...
- Spring+Struts2+Hibernate的整合
这篇主要采用Maven搭建Spring+Struts2+Hibernate的整合项目,复习一下SSH框架,虽然spring提供自己的MVC框架, 但是Spring也提供和其他框架的无缝整合,采用组件形 ...
- HibernateCRUD基础框架(1)-实体类
HibernateCRUD基础框架包括3篇文章,主要讲述整个CRUD基础框架的思路. 第1篇:讲述最基本的实体类,这些实体类是对SQL语言中的一些概念的封装. 第2篇:在这些实体类的基础上,开发一个& ...