4.7.Java类中方法的表现形式及其基本特征?
Java类中方法是为了描述具有共同性质的一组事物的基本功能/行为。
Java类中方法的表现形式
1.实例方法格式
访问限制修饰符 方法的返回值数据类型 方法的名称(参数列表){方法体}
(1).访问限制修饰符—public 缺省的
(2).方法的返回值数据类型
返回值-----方法执行结果
数据类型—基本数据类型【复合数据类型】
有返回值—方法体中的最后一句话是“return”,方法的返回值数据类型一定是结果值的具体数据类型
没有返回值—方法体中的没有“return”,方法的返回值数据类型void代替。
(3).方法的名称—合法的标识符【首字母小写,从第二个单词开始首字母大写】
(4)参数列表
参数----引入本方法以外的数据进入本方法进行运算【找帮手】局部变量
列表----可以有多个
没有参数的时候–()中的内容是空的
(5)方法体–方法的身体【具体执行代码】
例如:
public void tx1(){ }—没有返回值,没有参数的实例方法
public int tx2(){return 11;}—返回值为int,没有参数的实例方法
public void tx3(int a){ }—没有返回值,有参数1个int型参数的实例方法
public String t4(User us){return"hai";}—返回值为String的,有一个User参数的实例方法
public Student t5(User user,int num, char value){ retunrn null;}
2.静态方法格式
实例方法的访问限制修饰符后面加上static关键字的方法就是静态方法【类方法】
没有static关键字的方法就是实例方法
例如:
public static void t1(){ }—没有返回值,没有参数的静态方法【类方法】
public static int t2(){ return 11;}—返回值为int,没有参数的静态方法【类方法】
public static void t3(int a){ }—没有返回值,有参数1个int型参数的静态方法【类方法】
public static String t4(User us){ return"hai";}—返回值为Stringde1,有一个User参数的静态方法【类放法】。
public static Student t5(User us,int num,char value){ return null;}
3.构造方法格式
实例方法格式中去掉方法的返回值数据类型,方法的名称是类名这种方法就叫构造方法。
例如:
public class Person{
public Person(){ }—无参数的构造方法
public Person(int num){ }—有一个int型参数的构造方法
public Person(User us){ }—有一个User型参数的构造方法
public Person(User us,int num,char value){ }
}
构造方法作用就是将来为了创建对象用的。
当一个类创建好以后,会有一个默认的无参数构造方法存在,只是没有显式写出罢了。
当这个类中出现一个有参数的构造方法时,我们就需要将这个默认的无参数构造方法
显式写出,如果没有显式写出这个默认的无参数构造方法,那么这个默认的无参数构造方法将会被有参数的构造方法覆盖。
例如:
public class Student{
//存在一个默认的无参数构造方法
public Student(){}
public Student(String name){}
}
4.8.什么是方法重载?
在同一个类中方法的名称相同,参数不一样,这种现象就叫方法重载。
注意:方法重载与方法的返回值类型没有关系
例如:
public class LianXi4{
public void t1(){ }
public int t1(int num){return 0;}
}
参数不一样—先看个数,后看类型
例如:
public class LianXi4{
public void t1(int num){ }
public int t1(int num1,double num2){return 0;}
public int t1(double num2,int num1){return 0;}
}
构造方法、实例方法、静态方法都是可以重载的。
4.9.同一个Java类中方法与变量的调用关系?**
例如:
public class Peo{
public int peoid=10086;//实例变量
public static String peoname="xiaoming";//类变量
//构造方法中可以访问实例变量/类变量/局部变量
public Peo(){
char sex='男';//局部变量
//构造方法中访问实例变量默认this.实例变量,this可以被省略。
System.out.println("构造方法中-实例变量-peoid【默认】=="+this.peoid);
System.out.println("构造方法中-实例变量-peoid=="+peoid);
//构造方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
System.out.println("构造方法中-类变量-peoname【类名】=="+Peo.peoname);
System.out.println("构造方法中-类变量-peoname【this】=="+this.peoname);
System.out.println("构造方法中-类变量-peoname=="+peoname);
//构造方法中访问局部变量直接变量名称
System.out.println("构造方法中-局部变量-sex=="+sex);
}
//实例方法中可以访问实例变量/类变量/局部变量
public void t1(){
char sex='男';//局部变量
//实例方法中访问实例变量默认this.实例变量,this可以被忽略。
System.out.println("实例方法中-实例变量-peoid【默认】=="+this.peoid);
System.out.println("实例方法中-实例变量-peoid=="+peoid);
//实例方法中访问类变量默认类名.类变量,也可以this.类变量,类名/this.类变量,类 名/this可以被省略
System.out.println("实例方法中-类变量-peoname【类名】=="+Peo.peoname);
System.out.println("实例方法中-类变量-peoname【this】=="+peoname);
//实例方法中访问局部变量直接变量名称
System.out.println("实例方法中-局部变量-sex=="+sex);
}
//静态方法中不可以访问实例变量
//静态方法中可以访问类变量/局部变量
public static void t2(){
char sex='男';//局部变量
//System.out.println("静态方法中-实例变量-peoid=="+peoid);//错误
//静态方法中访问类变量默认类名.实例变量,类名可以被省略
System.out.println("实例方法中-类变量-peoname【类名】=="+Peo.peoname);
//静态方法中不能有this
//System.out.println("实例方法中-类变量-peoname【this=="+this.peoname】;
System.out.println("静态方法中-类变量-peoname=="+peoname);
//静态方法中访问局部变量直接变量名称
System.out.println("静态方法中-局部变量-sex=="+sex);
}
}
public class Start{
public static void main(String args[]){
Peo stu=new Peo();
stu.t1();
stu.t2();
}
}
运行的结果为:
总结:
在同一个类中:
构造方法中可以访问实例变量/类变量/局部变量
(1)构造方法中访问实例变量默认this.实例变量,this可以被省略。
(2)构造方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
(3)构造方法中访问局部变量直接变量名称
实例方法中可以访问实例变量/类变量/局部变量
(1)实例方法中访问实例变量默认this.实例变量,this可以被省略。
(2)实例方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
(3)实例方法中访问局部变量直接变量名称
静态方法中可以访问类变量/局部变量,不可以访问实例变量
(1)静态方法中访问类变量默认类名.实例变量,类名可以被省略
(2)静态方法中不能有this
(3)静态方法中访问局部变量直接变量名称
为什么静态方法中不可以访问实例变量变量?
静态方法内存分配时机早于实例变量的内存分配时机,静态方法访问实例变量的时候,实例变量是不存在。
4.10.同一个Java类中方法与方法的调用关系?
在同一个类中:
构造方法中可以访问其他的构造方法/实例方法/类方法
(1)构造方法中访问其他的构造方法new 其他的构造方法;
(2)构造方法中访问实例方法默认this.实例方法,this可以被省略
(3)构造方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略
例如:
public class Shang{
public Shang(){
new Shang(1);
this.shiLi();
shiLi();
this.lei();
lei();
}
public Shang(int num){
System.out.println("这是构造方法");
}
public void shiLi(){
System.out.println("这是实例方法");
}
public static void lei(){
System.out.println("这是类方法");
}
}
public class YunXing{
public static void main(String args[]){
Shang stu1=new Shang();
}
}
运行结果为:
实例方法中可以访问构造方法/其他实例方法/类方法
(1)实例方法中访问构造方法默认new 构造方法
(2)实例方法中访问其他实例方法默认this.其他实例方法,this可以被省略
(3)实例方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略
例如:
class Tian{
public void shiLi(){
new Tian();
this.shiLi(1);
shiLi(1);
this.lei();
lei();
}
public void shiLi(int num){
System.out.println("这是实例方法");
}
public Tian(){
System.out.println("这是构造方法");
}
public static void lei(){
System.out.println("这是类方法");
}
}
public class HuoQu{
public static void main(String args[]){
Tian s =new Tian();
s.shiLi();
}
}
运行结果图:
静态方法中可以访问构造方法/其他的静态方法,不可以访问实例方法
(1)静态方法中访问构造方法new 构造方法
(2)静态方法中不能有this
(3)静态方法中访问类方法默认类名.类方法,类名可以省略
例如:
class Jing{
public static void lei(){
new Jing();
Jing.lei(1);
lei(1);
}
public Jing(){
System.out.println("这是结构方法");
}
public static void lei(int num){
System.out.pritnln("这是静态方法");
}
}
public class Shen{
public static void main (String args[]){
Jing stu=new Jing();
}
}
运行结果图: