Java方法的重载以及构造函数的理解
2012-11-06 16:26
471 查看
一直对重载和构造函数的概念不是很理解,看了mars的视频以后有一种豁然开朗的感觉,写下来跟大家一起分享下。
方法的重载有3个条件:
1、函数位于同一个类下面;
2、方法名必须一样;
3、方法的参数列表不一样。
比如有以下的例子:
[java] view plaincopy
class Student {
void action(){
System.out.println("该函数没有参数!");
}
void action(int i)
{
System.out.println("有一个整形的参数!");
}
void action(double j)
{
System.out.println("有一个浮点型的参数!");
}
}
该类中定义了3个方法,但是3个方法的参数列表不一样;
下面在主函数中调用这个类:
[java] view plaincopy
public class Test {
/**
* @param args
* @author weasleyqi
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student st = new Student();
st.action();
st.action(1);
st.action(1.0);
}
}
看看运行结果:
从控制台的输出可以看出,我在主函数中实例化一个student对象,分别调用了这个对象的3中方法,由于3个方法的参数不一样,所以可以看到输出的结果也不一样;
构造函数的使用:
定义一个Sutdent类,类里面定义两个属性:
[java] view plaincopy
class Student {
String name;
int age;
}
此时的Student类中没有构造函数,系统会自动添加一个无参的构造函数,这个构造函数的名称必须和类的名称完全一样,大小写也必须相同,系统编译完了之后是以下的情况:
[java] view plaincopy
class Student {
Student()
{
}
String name;
int age;
}
主函数中实例化两个对象:
[java] view plaincopy
public class Test {
/**
* @param args
* @author weasleyqi
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student st = new Student();
st.name = "张三";
st.age = 10;
Student st2 = new Student();
st2.name = "李四";
st2.age = 20;
}
}
从主函数可以看出,此时的Student对象的属性比较少,创建的实例也比较少,如果属性多再创建多个实例的话,这个代码的量就很大,这时候,我们可以添加一个带参数的构造函数,如下:
[java] view plaincopy
class Student {
Student(String n, int a)
{
name = n;
age = a;
}
String name;
int age;
}
主函数的代码如下:
[java] view plaincopy
public class Test {
/**
* @param args
* @author weasleyqi
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student st = new Student("张三",10);
Student st2 = new Student("李四",20);
System.out.println("st的name:" + st.name +", st的age:" + st.age);
System.out.println("st2的name:" + st2.name +", st的age:" + st2.age);
}
}
此时系统运行的结果如图:
从运行结果可以看出,我们在实例化Student对象的时候,调用了带参数的构造函数,节省了很多的代码,要注意:如果我们在Student类中定义了一个带参数的构造函数,但是没有写无参的构造函数,这个时候我们在主函数中就不能定义 Student st = new Student();如果在Student类中加上无参的构造函数就可以实现这样的实例化。
方法的重载有3个条件:
1、函数位于同一个类下面;
2、方法名必须一样;
3、方法的参数列表不一样。
比如有以下的例子:
[java] view plaincopy
class Student {
void action(){
System.out.println("该函数没有参数!");
}
void action(int i)
{
System.out.println("有一个整形的参数!");
}
void action(double j)
{
System.out.println("有一个浮点型的参数!");
}
}
该类中定义了3个方法,但是3个方法的参数列表不一样;
下面在主函数中调用这个类:
[java] view plaincopy
public class Test {
/**
* @param args
* @author weasleyqi
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student st = new Student();
st.action();
st.action(1);
st.action(1.0);
}
}
看看运行结果:
从控制台的输出可以看出,我在主函数中实例化一个student对象,分别调用了这个对象的3中方法,由于3个方法的参数不一样,所以可以看到输出的结果也不一样;
构造函数的使用:
定义一个Sutdent类,类里面定义两个属性:
[java] view plaincopy
class Student {
String name;
int age;
}
此时的Student类中没有构造函数,系统会自动添加一个无参的构造函数,这个构造函数的名称必须和类的名称完全一样,大小写也必须相同,系统编译完了之后是以下的情况:
[java] view plaincopy
class Student {
Student()
{
}
String name;
int age;
}
主函数中实例化两个对象:
[java] view plaincopy
public class Test {
/**
* @param args
* @author weasleyqi
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student st = new Student();
st.name = "张三";
st.age = 10;
Student st2 = new Student();
st2.name = "李四";
st2.age = 20;
}
}
从主函数可以看出,此时的Student对象的属性比较少,创建的实例也比较少,如果属性多再创建多个实例的话,这个代码的量就很大,这时候,我们可以添加一个带参数的构造函数,如下:
[java] view plaincopy
class Student {
Student(String n, int a)
{
name = n;
age = a;
}
String name;
int age;
}
主函数的代码如下:
[java] view plaincopy
public class Test {
/**
* @param args
* @author weasleyqi
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student st = new Student("张三",10);
Student st2 = new Student("李四",20);
System.out.println("st的name:" + st.name +", st的age:" + st.age);
System.out.println("st2的name:" + st2.name +", st的age:" + st2.age);
}
}
此时系统运行的结果如图:
从运行结果可以看出,我们在实例化Student对象的时候,调用了带参数的构造函数,节省了很多的代码,要注意:如果我们在Student类中定义了一个带参数的构造函数,但是没有写无参的构造函数,这个时候我们在主函数中就不能定义 Student st = new Student();如果在Student类中加上无参的构造函数就可以实现这样的实例化。
相关文章推荐
- Java方法的重载以及构造函数的理解
- Java方法的重载以及构造函数的理解
- Java之构造函数,方法重载以及权限【3】
- Java面向对象基础---名词概念的理解:方法的重载、构造函数、封装性
- javaAPI深入理解(1)如何截断一个List以及List.subList()方法的坑
- 我是菜鸟:java多线程join方法,volatile以及synchronized关键字理解
- java中对toString方法和对控制台输出以及重写toString问题的理解(笔记)
- java 方法以及方法的重载
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- Lesson_for_java_day08--面向对象、重载和构造函数、this关键字的使用以及八大类在全局变量初始化中的值
- JAVA学习.方法的重载的理解
- java学习笔记九——构造函数、方法重写、重载
- Java基础-->函数的重载以及构造函数
- 深入理解Java的方法重载机制
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- 方法重载(overload)的例子分析(摘自<深入理解Java虚拟机>)
- java方法的重载、覆盖和隐藏,以及多态的区别
- java面向对象的继承以及方法重写和重载
- java中的方法重载与重写以及方法修饰符
- Java编译时类型与运行时类型以及重载和覆盖方法选择