[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)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...
随机推荐
- Python 极简教程(八)字符串 str
由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...
- 语音识别系统:有免费实用的"语音到文字"的软件么?
自从看了<李开复自传>,就对"语音识别系统"产生了非常深刻的印象. 根据自己的判断,语音识别系统还是非常有用的. 以自己的实际需求来看: 1.中国象棋中的应用. 中国象 ...
- C#执行sql文件
C# 执行sql文件 2012-05-11 12:28:57| 分类: App Develop|举报|字号 订阅 /// <summary> /// 执行sq ...
- winedt (latex 编译器)解决中文的问题(CJK & CTEX)
主要是导入相关的库支持: 1. CJK \usepackage{CJK}:CJK,是中日韩的英文首字母的组合,处理中文需要先导入这个包: \begin{CJK*}{GBK}{song}:默认句式,表示 ...
- ES6的学习之路(基础知识总结)
1. 变量声明 1).let 1)使用let定义的变量不会进行"变量提升" console.log(a);//Uncaught ReferenceError: a is not d ...
- <一> 爬虫的原理
一.爬虫是什么? #1.什么是互联网? 互联网是由网络设备(网线,路由器,交换机,防火墙等等)和一台台计算机连接而成,像一张网一样. #2.互联网建立的目的? 互联网的核心价值在于数据的共享/传递:数 ...
- amazeui页面分析5
amazeui页面分析5 一.总结 1.把原模板当成样例集合就好 2.都是一块一块的,删改等操作都方便 3.list方面的操作很多都是ui配合li 4.其实容器本质还是div,所以真的算简单了 5.样 ...
- 1、Java快速入门
第一课 Java基础1. ubuntu上环境搭建 (建议使用我们提供的VMWare映象文件) 如果要自己安装ubuntu, 请参考<韦东山Android系统视频使用手册.pdf> ubun ...
- zynq修改ramdisk文件系统
⑴ 挂载 Ramdisk新建目录 tmp, 并将 uramdisk.image.gz 拷贝至该目录$ cd <WORKDIR>/Filesystem$ mkdir tmp$ cp uram ...
- [Nuxt] Display Vuex Data Differently in Each Page of Nuxt and Vue.js
You often use the same data in different ways across pages. This lesson walks you through setting up ...