构造函数是对象被创建时初始对象的成员函数。它具有和它所在的类完全一样的名字。一旦定义好一个构造函数,创建对象时就会自动调用它。
构造函数没有返回类型,即使是void类型也没有。这是因为一个类的构造函数的返回值的类型就是这个类本身。
public class Test {
public void change(int a,int b,int c){
a++;
b++;
c++;
}
public static void main(String[] args) {
int a=2,b=3,c=4;
new Test()change(a,b,c);
}
}
public static void main (String args[]){
int a = 10;
int b = 2;
int c = add(a,b);
Systemoutprintln(c);
}
public static int add(int a,int b){
return a+b;
}
main函数是一个程序的入口,也是出口,main函数其实就是类里的一个方法,方法只能在类里声明了,所以maion函数必须声明在一个类里,一个程序里只有一个main函数,因为类与类之间是相与调用的。一个程序从开始运行就会先找main函数,然后再一步一步的执行,如果有多个main那么程序就会报错,因为他不知道该从那个门口(main函数)进,然而类为什么可以有多个呢,你还记的JAVA的三大基本特征么,即封装,继承,多态。而封装就是我们所说的类,他是把所有相同的属性,方法归纳到一起,即组成一个类。这样给你打个比方吧
main函数所在的一个类就相当于一个城市,而main函数就是城市的一个入口,并且只有一个入口,也可是出口,而城市中又有许多小区,我们叫他为类吧,而小区里的房子又基本相同,这也就验证了我们把同一类物品归为一类,即封装在一个类里,而每个小区又不同,这又验证了每一个类的实现功能 是不同的,而类与类这间的调用则是用NEW关键字,这个你应该会吧,继承,多态我就不用说
主函数的一般写法如下:
public static void main(String[] args){…}
下面分别解释这些关键字的作用:
(1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数。
(2)static关键字,告知编译器main函数是一个静态函数。也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示main()方法不存在。因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。
(3)void关键字表明main()的返回值是无类型。
(4)参数String[] args,这是本文的重点。
第一、程序使用者可以在命令行状态下向某个类传递参数。看下面的例子:
public class ArgsDemo {
public static void main(String[] args) {
String str = new String();
for (int i = 0; i < argslength; i++) {
Systemoutprintln(args[i]);
str += args[i];
}
Systemoutprintln(str);
}
}
使用javac ArgsDemojava命令生成ArgsDemoclass文件;然后使用“java ArgsDemo 参数一 参数二 参数三 …”的格式向ArgsDemo类传递参数。该示例程序将首先输出参数,然后输出所有参数的和。比如java ArgsDemo a b c,将得到这样的输出:
a
b
c
abc
需要注意的是,如果这里的循环条件不是i <5,则在命令行中输入的参数必须是5个,否则将会报错,错误类型为:
Exception in thread “main” javalangArrayIndexOutOfBoundException:3
at ArgsDemomain(ArgsDemojava:5)
第二、可以在另一个类中向包含main()的类传递参数,如下例:
public class A {
public static void main(String[] args)
{
for(int i=0;i
Systemoutprintln(args[i]);
}
}
public class B {
public static void main(String[] args)
{
c = new A();
String[] b = {"111","222","333"};
cmain(b);
}
}
首先定义一个class A,在A中定义一个main()函数,在该函数中输出参数args。然后定义一个classB,在B中初始化一个A的实例c,然后向c传递参数,并且调用c的main方法打印出传入的参数值。输出结果如下:
111
222
333
由于main()函数是静态函数,即不需要实例化也能使用,所以B使用下面的写法也能完成相同的功能:
public class B {
public static void main(String[] args)
{
//A c = new A();
String[] b = {"111","222","333"};
Amain(b);
}
}
总结:参数args的主要作用是为程序使用者在命令行状态下与程序交互提供了一种手段。此外在其他类中直接使用main()函数,并传递参数也是可行的,虽然这种方法不太常用,但毕竟为我们提供了一种选择。
(以上观点均系个人理解,不准确的地方欢迎批评指正。实例程序均调试通过)
对static的理解还有问题。main方法的代码是存在方法区的。方法不管是否为static的,都存在方法区。
就是为了创建类的对象,即使你不写,也会默认有一个空的没有参数的构造函数的。你可以在构造函数里面做一些给自己的属性赋值,对象初始化之类的事情,如果父类有带参数的构造函数,你不定义构造函数的话就没有办法调用父类的构造函数,这样你就不能继承那个父类
比方有个父类
class
Parent{
private
String
name;
public
Parent(String
name){
thisname
=
name;
}
}
你要定义一个类继承这个类
你就必须要再你自己的类的构造函数第一句话调用super(xxx),不然程序就是错的
如果你不在构造函数里面给自己的属性赋值,那么程序就会变得很繁琐,每个属性都要调用一个set方法去设置
举个列子吧
private long money; 定义一个私有变量类型为LONG 的MONEY
private double rate 定义一个私有变量类型为double 的rate
public (void) bank(long money,double rate)
{
thismoney=money; 这个私有变量等于这个构造函数中参数
thisrate=rate; 同上
}
这个就是简单的构造函数,通俗的讲就是你实现这个功能的算法,比如累加,判断,循环等等
最常用的就是GET 和SET方法
构造方法可以有参数,也可以无参数。
这就是简单的概念,深入点的话就要重写,重载,多态,继承,接口等等了,你可以随便找本JAVA的书看看,都有的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)