1.类中的方法
类中的方法--描述事物的功能行为
1.实例方法
格式:访问限制修饰符 方法的返回值类型 方法名称(参数列表){方法体}
1.访问限制修饰符---public 缺省的【没有写】
2.方法的返回值类型--就是方法执行的结果类型
(1)有返回值时,方法的返回值类型一定是方法执行结果的具体类型,方法的返回值类型可以使基本类型,复合类型,方法体重的最后一句话一定是return XXX;
(2)没有返回值,方法的返回值类型用void代替。
3.方法名称---合法的表示符【首字母小写,从第二个单词开始首字母大写】
4.(参数列表)---用来接收方法之外的数据进入笨方法参与运算【找帮手】,参数实际上是变量,没有初始值,属于局部变量【数据类型 变量名称】,可以没有,也可以有,也可以有多个,多个参数之间用“,”隔开
5.方法体---编写具体实现过程的地方。
例如:
package MethodTest;
public class ShiLiFangFa {
//实例方法
//有参数有返回值的方法
public int method1(int num){
System.out.println("有参数有返回值的方法");
return 18+num;
//return "String"+num错误的,返回值类型一定是方法执行结果的具体类型
}
//访问限制符是还可以是缺省的【没有写】
//缺省的没参数没返回值的方法
void method2(){
System.out.println("没有参数没有返回值的方法");
//return 100;
}
//有多个参数有返回值的方法
public int method3(int num1,long num2){
System.out.println("返回值为int型的有两个参数的实例方法");
return (int)(num1+num2);
}
public char[] method4(int size){
System.out.println("返回值为字符数组的有一个参数的实例方法");
char chararray[]=new char[size];
return chararray;
}
}
测试类
package MethodTest;
public class TestMain {
public static void main(String args[]){
ShiLiFangFa test1=new ShiLiFangFa();
//实例对象只能用对象调用
test1.method3(2,5);
test1.method2();
test1.method3(2,5);
test1.method4(1);
}
}
2. 静态方法【类方法】
使用static关键字修饰的方法就是静态方法【类方法】
格式:访问限制修饰符 static 方法的返回值类型 方法名称(参数列表){方法体}
例如:
package MethodTest;
public class JingTaiFangFa {
public static void method1(){
System.out.println("没有参数,没有返回值的静态方法");
}
public static int method2(){
System.out.println("没有参数,返回值为int型的静态方法");
return 18;
}
static int method3(int num1){
System.out.println("缺省的有一个参数为int型,返回值为int型的静态方法");
return 187;
}
public static int method4(int num2,double num3){
System.out.println("有两个参数,返回值为int型的静态方法");
return (int)(num2+num3);
}
public static char[] method5(int num4){
System.out.print("有一个参数,返回值为字符数组的静态方法");
char chararray[]=new char[num4];
return chararray;
}
}
测试类
package MethodTest;
public class TestMain {
public static void main(String args[]){
JingTaiFangFa test1=new JingTaiFangFa();
//静态方法【类方法】可以用类名访问,也可以用对象访问
JingTaiFangFa.method1();
test1.method2();
test1.method3(1);
test1.method4(10,12.5);
test1.method5(2);
}
}
实例方法与静态方法【类方法】的区别?
1.实例方法没有static,静态方法【类方法】有static
2.实例方法只能对象访问,静态方法【类方法】 可以对象访问,也可以类名访问
3.实例方法只在方法调用时分配运行空间,静态方法【类方法】在方法调用前已经分配好运行空间。
3.构造方法
构造方法的作用就是为了创建对象
我们创建好一个java类之后,默认类体中就有一个默认的五参数构造方法存在。只是没有显示出来
格式:访问限制修饰符 类名(参数列表){方法体}
放类中出现的有参数的构造方法时,默认无参数的构造方法会被覆盖,此时我们如果需要无参数的构造方法时,就需要手动给出无参数构造方法。
例如:
package MethodTest;
public class GouZaoFangFa {
//默认的构造方法
public GouZaoFangFa(){
System.out.println("没有参数的构造方法");
}
public GouZaoFangFa(int num){
System.out.println("有参数的的构造方法");
}
}
测试类
package MethodTest;
public class TestMain {
public static void main(String args[]){
GouZaoFangFa test1=new GouZaoFangFa();
}
}
2.方法重载
在同一个类中,方法的名称相同,参数不同这种现象叫方法重载。
注意:方法重载与方法的返回值类型没有关系,与方法的参数有关
方法的名称相同,方法的参数个数,参数类型
例如:
package MethodTest;
public class FangFaChongZai {
//构造方法重载
public FangFaChongZai(){}
public FangFaChongZai(String name){}
public FangFaChongZai(int num){}
//实例方法重载
public void method(){}
public int mtehod(){return 18;}
public char method(int num,char name){return 'A';}
public char method(char name,int num){return 'A';}
//静态方法重载
public static void method1(){}
public static int mtehod1(){return 18;}
public static char method1(int num,char name){return 'A';}
public static char method1(char name,int num){return 'A';}
}
3.同一个类中方法与变量的调用关系
类中可以包含两个基本元素---变量和方法
1.方法里面调用变量
构造方法中可以调用实例变量,默认this.实例变量,可以省略this
构造方法中可以调用静态成员变量,默认类名.静态成员变量,也可以this.成员变量,可以省略类名/this
构造方法中可以调用局部变量,局部标量名称访问
例如:
package MethodTest;
public class FangFaGetBianLiang {
//实例变量
public int num=100;
//静态成员变量
public static String name="张三";
//构造方法中访问变量
public void FangFaGetBianLiang(){
int num2=300;
//构造方法中可以调用实例变量 默认this.实例变量,可以省略this
System.out.println("实例变量-num=="+num);
System.out.println("实例变量-num=="+this.num);
//构造方法中可以调用静态成员变量 默认 类名.静态成员变量 也可以this.静态成员变量,可以省略类名/this
System.out.println("静态成员变量-name=="+name);
System.out.println("静态成员变量-name=="+this.name);
System.out.println("静态成员变量-name=="+FangFaGetBianLiang.name);
//构造方法中可以调用局部变量,局部名称变量访问
System.out.println("局部变量-num2="+num2);
//System.out.println("局部变量-num2="+this.num2);
//System.out.println("局部变量-num2="+FangFaGetBianLiang.num2);
}
}
测试类
package MethodTest;
public class TestMain {
public static void main(String args[]){
FangFaGetBianLiang test1=new FangFaGetBianLiang();
test1.FangFaGetBianLiang();
}
}
实例方法中可以调用实例变量,默认this.实例变量,可以省略this
实例方法中可以调用静态成员变量,默认类名.静态成员变量,也可以this.静态成员变量,可以省略类名/this
实例方法中可以调用局部变量,局部变量名称访问
例如:
package MethodTest;
public class FangFaGetBianLiang {
//实例变量
public int num=100;
//静态成员变量
public static String name="张三";
//实例方法中访问变量
public void Method1(){
int num2=300;
//实例方法中可以调用实例变量 默认this.实例变量,可以省略this
System.out.println("实例变量-num=="+num);
System.out.println("实例变量-num=="+this.num);
//实例方法中可以调用静态成员变量 默认 类名.静态成员变量 也可以this.静态成员变量,可以省略类名/this
System.out.println("静态成员变量-name=="+name);
System.out.println("静态成员变量-name=="+this.name);
System.out.println("静态成员变量-name=="+FangFaGetBianLiang.name);
//实例方法中可以调用局部变量,局部名称变量访问
System.out.println("局部变量-num2="+num2);
//System.out.println("局部变量-num2="+this.num2);
//System.out.println("局部变量-num2="+FangFaGetBianLiang.num2);
}
}
测试类
package MethodTest;
public class TestMain {
public static void main(String args[]){
FangFaGetBianLiang test1=new FangFaGetBianLiang();
test1.Method1();
}
}
静态方法中不可以调用实例变量
静态方法中可以调用静态成员变量,默认类名.静态成员变量,可以省略类名
静态方法中不能出现this
静态方法中可以调用后局部变量,局部变量名称访问
例如:
package MethodTest;
public class FangFaGetBianLiang {
//实例变量
public int num=100;
//静态成员变量
public static String name="张三";
//静态方法访问变量
public static void Method2(){
int num2=300;
//静态方法中不可以调用实例变量,且
//System.out.println("实例变量-num=="+num);//错误
//System.out.println("实例变量-num=="+this.num);//错误
//静态方法中可以调用静态成员变量 默认 类名.静态成员变量 ,可以省略类名
System.out.println("静态成员变量-name=="+name);
//System.out.println("静态成员变量-name=="+this.name);//错误
System.out.println("静态成员变量-name=="+FangFaGetBianLiang.name);
//静态方法中可以调用局部变量,局部名称变量访问
System.out.println("局部变量-num2="+num2);
//System.out.println("局部变量-num2="+this.num2);
//System.out.println("局部变量-num2="+FangFaGetBianLiang.num2);
}
}
测试类
package MethodTest;
public class TestMain {
public static void main(String args[]){
FangFaGetBianLiang test1=new FangFaGetBianLiang();
test1.Method2();
}
}
2.方法里面调用方法
构造方法中可以访问其他的构造方法
构造方法中可以访问实例方法,默认this.实例方法,也可以省略this
构造方法中可以访问静态方法,默认类名.静态方法,也可以this.静态方法,可以省略类名/this
实例方法中可以访问构造方法,new+构造方法();
实例方法中可以访问其他的实例方法,默认this.实例方法,可以省略this
实例方法中可以访问静态方法,默认类名.静态方法,也可以this.静态方法,可以省略类名/this
静态方法中可以访问构造方法,new+构造方法();
静态方法中不能访问实例方法
静态方法中不能出现this
静态方法中能访问其他的静态方法,默认类名.静态方法,可以省略类名
例如:
package MethodTest;
public class FangFaGetFangFa {
public FangFaGetFangFa(){
System.out.println("无参数构造方法");
//构造方法访问其他构造方法
new FangFaGetFangFa("张三");
//构造方法访问实例方法
this.Method1();
Method1();
//构造方法访问静态方法
FangFaGetFangFa.Method2();
this.Method2();
Method2();
}
public FangFaGetFangFa(String name){
System.out.println("有参数的构造方法-参数name="+name);
}
public void shiliMethod1(){
//实例方法访问构造方法
new FangFaGetFangFa("李四");
//实例方法访问其他实例方法
this.Method1();
Method1();
//实例方法访问静态方法
FangFaGetFangFa.Method2();
this.Method2();
Method2();
}
//实例方法
public void Method1(){
System.out.println("实例方法");
}
public static void staticMethod2(){
//静态方法访问构造方法
new FangFaGetFangFa("王五");
//静态方法不能访问实例方法,不能出现this
//this.Method1();//错误
//Method1();//错误
//静态方法访问其他静态方法
FangFaGetFangFa.Method2();
//this.Method2();//错误
Method2();
}
//静态方法
public static void Method2(){
System.out.println("静态方法");
}
}
测试类
package MethodTest;
public class TestMain {
public static void main(String args[]){
FangFaGetFangFa test1=new FangFaGetFangFa();
test1.shiliMethod1();
FangFaGetFangFa.staticMethod2();
}
}
总结:静态方法中不能访问实例元素【实例变量/实例方法】,静态方法中不能出现this
为什么静态方法中不能访问实例元素?
原因是静态方法的内存分配时机早于实例元素的内存分配时机。