Java类和对象(方法)

一、Java类中方法的表现形式及其基本特征

  Java类中方法是为了描述具有共同性质的一组数物的基本功能/行为。

Java类中方法的表现形式

1. 实例方法

  实例方法格式:
    访问限制修饰符 方法的返回值数据类型 方法的名称(参数列表){方法体}
  1. 访问限制修饰符—public 缺省的
  2. 方法的返回值数据类型
    返回值-----方法执行结果
    数据类型—基本数据类型【复合数据类型】
    有返回值—方法体中的最后一句话是“return”,方法的返回值数据类型一定是结果值的具体数据类型
    没有返回值—方法体中的没有“return”,方法的返回值数据类型void代替。
  3. 方法的名称—合法的标识符【首字母小写,从第二个单词开始首字母大写】
  4. 参数列表
    参数----引入本方法以外的数据进入本方法进行运算【找帮手】局部变量
    列表----可以有多个
    没有参数的时候–()中的内容是空的
  5. 方法体–方法的身体【具体执行代码】
例如:

public   void  test1(){ } --- 没有返回值,没有参数的实例方法
public   int   test2(){ return 12;}---返回值为int,没有参数的实例方法
public   void  test3(int a){  } ---- 没有返回值,有参数1int型参数的实例方法
public   String test4(UserBean user){  return “hello”;}---返回值为String的,有一个UserBean参数的实例方法。
public   Student  test5(UserBean user,int num,char  value){  return null;}

2. 静态方法

  实例方法的访问限制修饰符后面加上static关键字的方法就是静态方法【类方法】
  没有static关键字的方法就是实例方法
  静态方法格式:
    访问限制修饰符 static 方法的返回值数据类型 方法的名称(参数列表){方法体}
例如:

public static  void  test1(){ } --- 没有返回值,没有参数的静态方法【类方法】
public static   int   test2(){ return 12;}---返回值为int,没有参数的静态方法【类方法】
public static  void  test3(int a){  } ---- 没有返回值,有参数1int型参数的静态方法【类方法】
public static  String test4(UserBean user){  return “hello”;}---返回值为String的,有一个UserBean参数的静态方法【类方法】。
public  static  Student  test5(UserBean user,int num,char  value){  return null;}

3. 构造方法

  实例方法格式中去掉方法的返回值数据类型,方法的名称是类名这种方法就叫构造方法。
  构造方法格式:
    访问限制修饰符 类名(参数列表){方法体}
例如:

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  
}

  构造方法、实例方法、静态方法都是可以重载的

三、同一个Java类中方法与变量的调用关系

在用一个类中:
  构造方法中可以访问实例变量/类变量/局部变量
    构造方法中访问实例变量默认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();
	}
}

运行结果
Java类和对象(方法)_第1张图片

四、同一个Java类中方法与方法的调用关系

在用一个类中:
  构造方法中可以访问其他的构造方法/实例方法/类方法
    构造方法中访问其他的构造方法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();
	}
}

运行结果:
Java类和对象(方法)_第2张图片

总结

Java类和对象(方法)_第3张图片

你可能感兴趣的:(Java)