Java类中方法是为了描述具有共同性质的一组数物的基本功能/行为。
实例方法格式:
访问限制修饰符 方法的返回值数据类型 方法的名称(参数列表){方法体}
1. 访问限制修饰符—public 缺省的
2. 方法的返回值数据类型
返回值-----方法执行结果
数据类型—基本数据类型【复合数据类型】
有返回值—方法体中的最后一句话是“return”,方法的返回值数据类型一定是结果值的具体数据类型
没有返回值—方法体中的没有“return”,方法的返回值数据类型void代替。
3. 方法的名称—合法的标识符【首字母小写,从第二个单词开始首字母大写】
4. 参数列表
参数----引入本方法以外的数据进入本方法进行运算【找帮手】局部变量
列表----可以有多个
没有参数的时候–()中的内容是空的
5. 方法体–方法的身体【具体执行代码】
例如:
public void test1(){ } --- 没有返回值,没有参数的实例方法
public int test2(){ return 12;}---返回值为int,没有参数的实例方法
public void test3(int a){ } ---- 没有返回值,有参数1个int型参数的实例方法
public String test4(UserBean user){ return “hello”;}---返回值为String的,有一个UserBean参数的实例方法。
public Student test5(UserBean user,int num,char value){ return null;}
实例方法的访问限制修饰符后面加上static关键字的方法就是静态方法【类方法】
没有static关键字的方法就是实例方法
静态方法格式:
访问限制修饰符 static 方法的返回值数据类型 方法的名称(参数列表){方法体}
例如:
public static void test1(){ } --- 没有返回值,没有参数的静态方法【类方法】
public static int test2(){ return 12;}---返回值为int,没有参数的静态方法【类方法】
public static void test3(int a){ } ---- 没有返回值,有参数1个int型参数的静态方法【类方法】
public static String test4(UserBean user){ return “hello”;}---返回值为String的,有一个UserBean参数的静态方法【类方法】。
public static Student test5(UserBean user,int num,char value){ return null;}
实例方法格式中去掉方法的返回值数据类型,方法的名称是类名这种方法就叫构造方法。
构造方法格式:
访问限制修饰符 类名(参数列表){方法体}
例如:
public class Person{
public Person(){ } --- 无参数的构造方法
public Person(int num){ } --- 有一个int型参数的构造方法
public Person(UserBean user){ } ---有一个UserBean 型参数的构造方法
public Person(UserBean user,int num,char value){}
}
构造方法作用就是将来为了创建对象用的。
当一个类创建好以后,会有一个默认的无参数构造方法存在,只是没有显式写出罢了。
当这个类中出现一个有参数的构造方法时,我们就需要将这个默认的无参数构造方法
显式写出,如果没有显式写出这个默认的无参数构造方法,那么这个默认的无参数构造方法将会被有参数的构造方法覆盖。
public class Student{
//存在一个默认的无参数构造方法
public Student(){}
public Student(String name){}
}
在同一个类中方法的名称相同,参数不一样,这种现象就叫方法重载。
注意:方法重载与方法的返回值类型没有关系
例如:
public class UserBean{
public void test1(){}
public int test1(int num){return 0;}
}
参数不一样—先看个数,后看类型
例如:
public class UserBean{
public void test1(int num){}
public int test1(int num1 ,double num2){return 0;} // int double
public int test1(double num2,int num1 ){return 0;} // double int
}
构造方法、实例方法、静态方法都是可以重载的
在用一个类中:
构造方法中可以访问实例变量/类变量/局部变量
构造方法中访问实例变量默认this.实例变量,this可以被省略。
构造方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
构造方法中访问局部变量直接变量名称
实例方法中可以访问实例变量/类变量/局部变量
实例方法中访问实例变量默认this.实例变量,this可以被省略。
实例方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
实例方法中访问局部变量直接变量名称
静态方法中可以访问类变量/局部变量,不可以访问实例变量
静态方法中访问类变量默认类名.类变量,类名可以被省略
静态方法中不能有this
静态方法中访问局部变量直接变量名称
为什么静态方法中不可以访问实例变量变量?
静态方法内存分配时机早于实例变量的内存分配时机,静态方法访问实例变量的时候,实例变量是不存在。
public class Person{
public int perid=1001;//实例变量
public static String pername="zhangsan";//类变量
//构造方法中可以访问实例变量/类变量/局部变量
public Person(){
char sex='男';//局部变量
//构造方法中访问实例变量默认this.实例变量,this.可以被省略
System.out.println("构造方法中访问实例变量有this.===="+this.perid);
System.out.println("构造方法中访问实例变量没有this.===="+perid);
//构造方法中访问类变量默认类名.实例变量,也可以this.类变量,类名./this.可以被省略
System.out.println("构造方法中访问类变量有this.===="+this.pername);
System.out.println("构造方法中访问类变量有类名.===="+Person.pername);
System.out.println("构造方法中访问类变量没有类名./this.===="+pername);
//构造方法中访问局部变量直接变量名称
System.out.println("构造方法中访问局部变量===="+sex);
}
//实例方法中可以访问实例变量/类变量/局部变量
public void testMehodl(){
char sex='男';//局部变量
//实例方法中访问实例变量默认this.实例变量,this可以被省略。
System.out.println("实例方法中访问实例变量有this.===="+this.perid);
System.out.println("实例方法中访问实例变量没有this.===="+perid);
//实例方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
System.out.println("实例方法中访问类变量有this.===="+this.pername);
System.out.println("实例方法中访问类变量有类名.===="+Person.pername);
System.out.println("实例方法中访问类变量没有类名./this.===="+pername);
//实例方法中访问局部变量直接变量名称
System.out.println("实例方法中访问局部变量===="+sex);
}
//静态方法中不可以访问实例变量变量
//静态方法中不能有this.
//静态方法中可以访问类变量/局部变量
public static void testStaticMehtod(){
char sex='男';//局部变量
//System.out.println("静态方法中访问实例变量有this.===="+this.perid);
//System.out.println("静态方法中访问实例变量没有this.===="+perid);
//静态方法中访问类变量默认类名.实例变量,类名可以被省略
//System.out.println("静态方法中访问实例变量有this.===="+this.perid);
System.out.println("静态方法中访问类变量有类名.===="+Person.pername);
System.out.println("静态方法中访问类变量没有类名.===="+pername);
//静态方法中访问局部变量直接变量名称
System.out.println("静态方法中访问局部变量===="+sex);
}
}
public class TeseMain{
public static void main(String args[]){
Person per1=new Person();
per1.testMehodl();
per1.testStaticMehtod();
}
}
在用一个类中:
构造方法中可以访问其他的构造方法/实例方法/类方法
构造方法中访问其他的构造方法new 其他的构造方法;
构造方法中访问实例方法默认this.实例方法,this可以被省略
构造方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略
实例方法中可以访问构造方法/其他实例方法/类方法
实例方法中访问构造方法默认new 构造方法
实例方法中访问其他实例方法默认this.其他实例方法,this可以被省略
实例方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略
静态方法中可以访问构造方法/其他的静态方法,不可以访问实例方法
静态方法中访问构造方法new 构造方法
静态方法中不能有this
静态方法中访问类方法默认类名.类方法,类名可以省略
public class Person{
public Person(){
System.out.println("构造方法");
}
public void student(){
System.out.println("实例方法");
}
public static void stuSta(){
System.out.println("静态方法");
}
//构造方法中可以访问其他的构造方法/实例方法/类方法
public Person(int ag){
new Person();
this.student();
student();
Person.stuSta();
this.stuSta();
stuSta();
}
//实例方法中可以访问构造方法/其他实例方法/类方法
public void stuStatic(){
new Person();
this.student();
student();
Person.stuSta();
this.stuSta();
stuSta();
}
//静态方法中可以访问构造方法/其他的静态方法,不可以访问实例方法
public static void stuStal(){
new Person();
//student();//不可以访问实例方法
//this.stuSta();//静态方法中不能有this
Person.stuSta();
stuSta();
}
}
public class DiaoYong{
public static void main(String args[]){
Person per1=new Person(4);
per1.stuStatic();
per1.stuStal();
}
}