1.类中的方法
(1)实例方法
格式:访问限制修饰符 方法的返回值数据类型 方法名称(参数列表){方法体}
解释:
- 访问限制修饰符------public / 缺省的
- 方法的返回值数据类型------就是方法的执行结果类型
有返回值时,方法的返回值数据类型一定是方法执行结果的具体类型;
方法的返回值类型可以是基本类型,也可以是复合数据类型;
最后一句话一定要是return xxx;
Xxx不能直接写数据类型的符号,写变量的名称或者值
没有返回值时,方法的返回值类型使用void代替。
- 方法名称------合法的标识符【首字母小写,从第二个单词开始首字母大写】
- (参数列表)------用来接收方法之外的数据进入本方法参与运算【找帮手】
参数实际上是变量,在这没有初始值,属于局部变量【数据类型 变量名称】
参数列表可以没有,就是空的(),也可以有多个,多个参数之间用“,”
- 方法体------编写具体实现过程的地方,具体执行代码
例:
public class ShiLiFangFa {
//没有返回值,没有参数的实例方法,用void代替返回值
public void method1(){
}
//访问限制符也可以缺省,没有返回值,有一个int参数的实例方法
void method2(int a){
}
//访问限制符也可以缺省
//方法返回值类型是基本类型,最后一句话一定是return xxx;
//返回值为int,没有参数的实例方法
int method3(){
return 100;
}
//返回值为double,有参数的实例方法
public double method4(double num){
System.out.println("返回值为double型,有一个double型参数的实例方法");
return num;
}
//返回值为int,有2个参数的实例方法
public int method5(int num1,int num2){
System.out.println("返回值为int型,有2个int型参数的实例方法");
return num1+num2;//返回值类型要和前面相符合
}
//错误,返回值为int型,但是return后的类型是double型,精度比int高
/*
public int method6(int num1,double num2){
System.out.println("");
return num1+num2;
}
*/
//改正方法,强制类型转换
public int method6(int num1,double num2){
System.out.println("");
return (int)(num1+num2);
}
//修饰的返回值为字符数组的有一个参数的实例方法
public char[] chararray(int size){
char chararray[]=new char[size];
return chararray;
}
}
(2)静态方法【类方法】
static关键字修饰的实例方法就是静态方法【类方法】
格式:
访问限制修饰符 static方法的返回值数据类型 方法名称(参数列表){方法体}
例:
public class JingTaiFangFa {
//没有返回值,没有参数的静态方法,用void代替返回值
public static void method1(){
}
//访问限制符也可以缺省,没有返回值,有一个int参数的静态方法
static void method2(int a){
}
//访问限制符也可以缺省
//方法返回值类型是基本类型,最后一句话一定是return xxx;
//返回值为int,没有参数的静态方法
static int method3(){
return 100;
}
//返回值为double,有参数的静态方法
public static double method4(double num){
System.out.println("返回值为double型,有一个double型参数的静态方法");
return num;
}
//返回值为int,有2个参数的静态方法
public static int method5(int num1,int num2){
System.out.println("返回值为int型,有2个int型参数的静态方法");
return num1+num2;//返回值类型要和前面相符合
}
//错误,返回值为int型,但是return后的类型是double型,精度比int高
/*
public static int method6(int num1,double num2){
System.out.println("");
return num1+num2;
}
*/
//改正方法,强制类型转换
public static int method6(int num1,double num2){
System.out.println("");
return (int)(num1+num2);
}
//修饰的返回值为字符数组的有一个参数的静态方法
public static char[] chararray(int size){
char chararray[]=new char[size];
return chararray;
}
}
(3)实例方法和静态方法【类方法】区别
- 实例方法没有static关键字,静态方法【类方法】有static关键字
- 实例方法只能用对象访问,静态方法可以对象访问,也可以类名访问
- 实例方法只在方法调用时分配运行空间,静态方法在方法调用前已经分配好运行空间
测试类:
public class TestMain {
public static void main(String[] args) {
//测试实例方法访问
//创建ShiLiFangFa类对象
ShiLiFangFa slff=new ShiLiFangFa();
//实例方法只能对象访问
slff.method1();
slff.method2(2);
slff.method3();
slff.method4(1.0);
slff.method5(5,5);
slff.method6(6,6);
//ShiLiFangFa.method1();类名访问报错
//测试静态方法访问
//创建JingTaiFangFa对象
JingTaiFangFa jtff=new JingTaiFangFa();
//静态方法【类方法】可以对象访问,也可以类名访问
jtff.method1();
JingTaiFangFa.method1();
}
}
(4)构造方法
去掉方法的返回值数据类型,方法的名称是类名这种方法就是构造法。
格式:访问限制修饰符 类名(参数列表){方法体}
- 构造方法的作用就是为了创建对象用的。
- 我们创建好一个java类之后,默认类体中就有一个默认的无参数构造方法存在,只是没有显示出来
- 当类中出现的有参数的构造方法时,默认无参数的构造方法会被覆盖,此时我们如果需要无参数的构造方法时,就需要手动给出无参数构造方法,显示出来。
例:
public class GouZaoFangFa {
public GouZaoFangFa(){
System.out.println("无参数构造方法");
}
//当类中出现的有参数的构造方法时,默认无参数的构造方法会被覆盖,
//此时我们如果需要无参数的构造方法时,就需要手动给出无参数构造方法
public GouZaoFangFa(String name){
System.out.println("有参数构造方法");
}
}
2.方法重载
在同一个类中,方法的名称相同,参数不同这种现象叫方法重载。
方法重载与方法的返回值数据类型没有关系,与方法的参数有关;
方法的名称相同 ,方法的参数个数、参数类型不同
例:
public class FangFaChongZai {
//实例方法重载
public void method1(){}
public int method1(int num){return 100;}
public char method1(int num,char ch){return 'a';}
public char method1(char ch,int num){return 'a';}
//静态方法重载
public static void staticmethod1(){}
public static int staticmethod1(int num){return 100;}
public static char staticmethod1(int num,char ch){return 'a';}
public static char staticmethod1(char ch,int num){return 'a';}
//构造方法重载
public FangFaChongZai(){}
public FangFaChongZai(String name){}
public FangFaChongZai(int age){}
}
3. 同一个类中方法与变量的调用关系
类中包含两个基本元素------变量和方法
(1)构造方法与变量调用关系
构造方法可以访问实例变量,静态变量【类变量】,局部变量
构造方法访问实例变量:默认this.实例变量,this可以被省略。
构造方法访问类变量:默认类名.类变量,也可以this.类变量,类名和this都可以被省略
构造方法访问局部变量:直接变量名称
(2)实例方法与变量调用关系
实例方法中:可以访问实例变量,类变量,局部变量
实例方法中访问实例变量: 默认this.实例变量, this可以被省略。
实例方法中访问类变量: 默认类名.类变量, 也可以this.类变量, 类名/this可以被省略
实例方法中访问局部变量: 直接变量名称
(3)静态方法与变量调用关系
静态方法中:可以访问类变量,局部变量,不可以访问实例变量
静态方法中访问类变量: 默认类名.类变量, 类名可以被省略
静态方法中不能有this
静态方法中访问局部变量: 直接变量名称
例:
//同一个类中方法里面调用变量 java程序=对象+消息
public class FangFaGetBianLiang {
//实例变量
public int number=1001;
//静态成员变量
public static String name="zhangsan";
//构造方法访问变量
public FangFaGetBianLiang(){
//局部变量
String address="西安";
//构造方法中可以调用实例变量,默认this.实例变量,可以省略this
System.out.println("实例变量--number="+this.number);
System.out.println("实例变量--number="+number);
//构造方法中可以调用静态成员变量
//默认类名.静态成员变量,也可以this.静态成员变量,可以省略类名/this
System.out.println("静态成员变量-name=" + FangFaGetBianLiang.name);
System.out.println("静态成员变量-name=" + this.name);
System.out.println("静态成员变量-name=" + name);
//构造方法中可以调用局部变量,直接变量名称
//System.out.println("局部变量-address="+FangFaGetBianLiang.address); 报错
//System.out.println("局部变量-address="+this.address);报错
System.out.println("局部变量-address=" + address);
}
// 实例方法中访问变量
public void testMethod() {
// 局部变量
String address = "西安";
// 实例方法中可以调用实例变量,默认this.实例变量,可以省略this
System.out.println("实例变量-number=" + this.number);
System.out.println("实例变量-number=" + number);
// 实例方法中可以调用静态成员变量,默认类名.静态成员变量,也可以this.静态成员变量,可以省略类名/this
System.out.println("静态成员变量-name=" + FangFaGetBianLiang.name);
System.out.println("静态成员变量-name=" + this.name);
System.out.println("静态成员变量-name=" + name);
// 实例方法中可以调用局部变量,局部变量名称访问
// System.out.println("局部变量-address="+FangFaGetBianLiang.address);
// System.out.println("局部变量-address="+this.address);
System.out.println("局部变量-address=" + address);
}
// 静态方法方法中访问变量
public static void testStatic() {
// 局部变量
String address = "西安";
// 静态方法方法中不可以调用实例变量
//System.out.println("实例变量-number=" + this.number);
//System.out.println("实例变量-number=" + number);
// 静态方法中可以调用静态成员变量,默认类名.静态成员变量,可以省略类名
System.out.println("静态成员变量-name=" + FangFaGetBianLiang.name);
// 静态方法中不能出现this
//System.out.println("静态成员变量-name=" + this.name);
System.out.println("静态成员变量-name=" + name);
// 静态方法中可以调用局部变量,局部变量名称访问
// System.out.println("局部变量-address="+FangFaGetBianLiang.address);
// System.out.println("局部变量-address="+this.address);
System.out.println("局部变量-address=" + address);
}
}
测试类:
public class TestMain {
public static void main(String[] args) {
//测试构造方法访问变量
FangFaGetBianLiang ffgbl=new FangFaGetBianLiang();
ffgbl.testMethod();
FangFaGetBianLiang.testStatic();
}
}
4. 同一个类中方法与方法的调用关系
(1)构造方法与方法调用关系
构造方法可以访问实例方法,静态方法【类方法】,其他实例方法
构造方法访问实例方法:默认this.实例方法,this可以被省略。
构造方法访问类方法:默认类名.类方法,也可以this.类方法,类名和this都可以被省略
构造方法访问构造方法:new 构造方法;
(2)实例方法与方法调用关系
实例方法中:可以访问实例方法,类方法,构造方法
实例方法中访问实例方法: 默认this.实例方法, this可以被省略。
实例方法中访问类方法: 默认类名.实例方法, 也可以this.类方法, 类名/this可以被省略
实例方法中访问构造方法: new 构造方法
(3)静态方法与方法调用关系
静态方法中:可以访问其他类方法,不可以访问实例方法
静态方法中访问类方法: 默认类名.类方法, 类名可以被省略
静态方法中不能有this
静态方法中访问构造方法: new 构造方法
总结:
静态的都不能访问实例的,因为静态内存分配实际早于实例内存分配,静态访问实例的时候,实例还不存在。
静态不能使用this:
例:
public class FangFaGetFangFa {
//构造方法中访问方法
public FangFaGetFangFa(){
System.out.println("无参数构造方法");
//构造方法中可以访问其他的构造方法,new+构造方法
new FangFaGetFangFa("hello");
//构造方法中可以访问实例方法,默认this.实例方法,可以省略this
this. testMethod1();
testMethod1();
//构造方法中可以访问静态方法,默认类名.静态方法,也可以this.静态方法,可以省略类名/this
FangFaGetFangFa.staticMethod1();
this.staticMethod1();
staticMethod1();
}
//有参数的构造方法
public FangFaGetFangFa(String name){
System.out.println("有参数构造方法-参数name="+name);
}
//实例方法
public void testMethod1(){
//实例方法中可以访问构造方法,new+构造方法
new FangFaGetFangFa("hello");
new FangFaGetFangFa();
//实例方法中可以访问其他的实例方法,默认this.实例方法,可以省略this
this.testMethod2();
testMethod2();
//实例方法中可以访问静态方法,默认类名.静态方法,可以this.静态方法,可以省略类名/this
FangFaGetFangFa.staticMethod1();
this.staticMethod1();
staticMethod1();
}
public void testMethod2(){
System.out.println("实例方法");
}
//静态方法访问方法
public static void staticMethod1(){
//静态方法中可以访问构造方法,new+构造方法();
new FangFaGetFangFa("hello");
//静态方法中不能访问实例方法
//testMethod2();
//静态方法中不能出现this
//this.testMethod2();
//静态方法中能访问其他的静态方法,默认类名.静态方法,可以省略类名
FangFaGetFangFa.staticMethod2();
staticMethod2();
}
public static void staticMethod2(){
System.out.println("静态方法");
}
}
最后总结: