在前面咱们常用到System.out.println(),那么它是什么呢?java
这句话的用法是调用系统类System中的标准输出对象out中的方法println()。数组
java方法是语句的集合,他们在一块儿执行一个功能。函数
修饰符 返回值类型 方法名(参数类型 参数名){ 。。。 方法体 。。。 return 返回值; }
Java支持两种调用方法的方式,根据方法是否返回值来选择。测试
当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交换控制权给程序。spa
当方法返回一个值的时候,方法调用一般被看成一个值。例如:命令行
int larger=max(30,40);
若是方法返回值是void(能够有参数),方法调用必定是一条语句。例如,方法println()返回void。下面的调用是个语句:对象
public void ending(){ System.out.println("Thanking for view!") }
没法从静态上下文中引用非静态方法。 blog
package pkg2020华南虎; /** * * @author yl */ public class TestMax { public static void main(String[] args) { int i = 20; int j = 23; int k = max(i, j); System.out.println("Max number is "+k+"."); } public static int max(int a, int b) { int result; if (a > b) { result = a; } else { result = b; } return result; } }
main方法是被JVM调用 的,除此以外,main方法和其余方法没什么区别。String【】代表参数是字符串数组。继承
package pkg2020华南虎; /** * * @author yl */ public class TestVoidMethod { public static void main(String[] args) { printGrade(78.5); } static void printGrade(double score) { if (score > 90) { System.out.println(score + " is perfect."); } else if (score > 60) { System.out.println(score + " is OK."); } else { System.out.println(score + " is Flunk."); } } }
这里printGrade方法是一个void类型方法,它不返回值。内存
一个void方法的调用必定是一个语句。
调用一个方法的时候须要提供参数,你必须按照参数列表指定的顺序提供。
例如,下面的方法n次打印一个消息。
public static void nPrintln(String message,int n){ for(int i<0;i<n;i++){ System.out.println(message); } }
下面的例子演示按值传递的效果。
该程序建立一个方法,该方法用于交换两个变量。
package pkg2020华南虎; /** * * @author yl */ public class SwapValue { public static void main(String[] args) { int num1 = 1; int num2 = 5; swap(num1, num2); System.out.println("num1,num2:" + num1 + "," + num2); } static void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } }
传递两个参数调用swap方法。可是,方法被调用后,实参的值并无改变。
上面使用的max方法仅仅适用于int类型的数据,可是若是你想要的到两个浮点型数据的最大值呢?
解决方法是建立另外一个有相同名字可是参数不一样的方法,以下代码所示:
public static double max(double num1,double num2){ int result; if(num1>num2) result=num1; else result=num2; return result; }
若是你调用max方法时传递的是int型参数,则int型参数的max方法会被调用。
若是传递的是double型参数,则double类型的max方法体会被调用,这称为方法重载。
即一个类的两个方法拥有相同的名字,可是有不一样的参数列表。Java编译器根据方法签名判断哪一个方法应该被调用。方法重载可让程序更清晰易读。执行密切相关任务的方法应该使用相同的名字。
package pkg2020华南虎; /** * * @author yl */ public class CommandLine { public static void main(String[] args) { for(int i=0;i<args.length;i++){ System.out.println("args["+i+"]"+args[i]); } } }
当一个对象被建立的时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。
一般会使用构造方法给一个类的实例变量赋初值,或者执行其余必要的步骤来建立一个完整的对象。
无论你是否自定义构造方法,全部的类都有构造方法,由于Java自动提供了一个默认构造方法,默认构造方法的访问修改符和类的访问修改符相同(类为public,构造函数也为public;类改成protected,构造函数也改成protected)。一旦你定义了本身的构造方法,默认构造方法就会失效。
实例
class MyClass{ int x; MyClass(){//构造函数 x=10; } }
也能够像下面这样调用构造方法来初始化一个对象:
public class ConsDemo{ public static void main(String[]args){ MyClass t1=new MyClass(); MyClass t2=new MyClass(); System.out.println(t1.x+" "+t2.x); } }
大多时候须要一个有参数的构造方法。
实例
class MyClass{ int x; MyClass(int i){//构造函数 x=i; } }
public class ConsDemo{ public static void main(String args[]){ MyClass t1=new MyClass(10); MyClass t2=new MyClass(20); System.out.println(t1.x+" "+t2.x); } }
JDK1.5开始,Java支持传递同类型的可变参数给一个方法。
实例
Java容许定义这样的方法,它在对象被垃圾收集器(回收)以前调用,这个方法叫作finalize(),它用来清除回收对象。例如,你可使用finalize()来确保一个对象打开的文件被关闭了。
在finalize()方法里,你必须指定在对象销毁时候要执行的操做。
finalize()通常格式是:
protected void finalize(){ //终结代码 }
protected限定符不可被继承,确保finalize()方法不会被该类之外的代码调用;void返回语句。
固然,Java的内存回收能够由JVM来自动完成。若是你手动使用,则可使用上面的方法。