[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)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...
随机推荐
- codevs 5960 信使
codevs 5960 信使 题目描述 Description 战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系.信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单 ...
- php訪问mysql数据库
PHP訪问Mysql数据库 PHP能够通过mysql接口和mysqli接口訪问mysql数据库. 须要加入mysql和mysqli接口才干訪问mysql数据库. windows下配置amp: a.安装 ...
- HDU 4869 Turn the pokers(思维+组合公式+高速幂)
pid=4869" target="_blank">Turn the pokers 大意:给出n次操作,给出m个扑克.然后给出n个操作的个数a[i],每一个a[i] ...
- JS如何动态生成变量名[重点]
解决方案: function create_variable(num){ var name = "test_"+num; //生成函数名 ...
- nuxt按需引入 element-UI、自定义主题色(终极按需引入)
首先你要知道 nuxt.js怎么引入第三方插件 : 不多BB. 一.按需引入element-UI 第一步:安装 babel-plugin-component: npm install babel-pl ...
- 【CS Round #44 (Div. 2 only) D】Count Squares
[链接]点击打开链接 [题意] 给你一个0..n和0..m的区域. 你可以选定其中的4个点,然后组成一个正方形. 问你可以圈出多少个正方形. (正方形的边不一定和坐标轴平行) [题解] 首先,考虑只和 ...
- js进阶 14-1 jquery的ajax系列中的load方法的作用是什么
js进阶 14-1 jquery的ajax系列中的load方法的作用是什么 一.总结 一句话总结:jQuery load()方法作用是从服务器加载数据,是一个简单但强大的AJAX方法. 1.load函 ...
- Android Warning not all local changes may be shown due to an error
idea使用svn出现Warning not all local changes may be shown due to an error,如下图所示: 解决方案: 1.File > Setti ...
- python3 随机生成10以内的加法算术题
今晚晚饭过后,看到小孩在做加法题,全是10以内的,因为她现在只会10以内的加法题.而这些题是老婆手动出的题目. 看到这个情景,突然想到,可以用python来实现随机出题,而且可以指定出多少题,出多少以 ...
- POJ 3134 - Power Calculus (IDDFS)
题意:求仅仅用乘法和除法最快多少步能够求到x^n 思路:迭代加深搜索 //Accepted 164K 1094MS C++ 840B include<cstdio> #include< ...