Java基础知识点、七(方法)

本文详细探讨了Java类中方法的定义,包括实例方法、静态方法和构造方法的格式。讲解了方法重载的概念,强调其与返回值类型无关,主要依赖于参数的不同。同时,阐述了同一个Java类中方法与变量、方法的调用关系,以及静态方法为何不能访问实例变量的原因。
摘要由CSDN通过智能技术生成

Java中的类和对象_2

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

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

Java类中方法的表现形式 

   1.实例方法格式

      访问限制修饰符  方法的返回值数据类型  方法的名称(参数列表){方法体}

         (1).访问限制修饰符---public  缺省的

         (2).方法的返回值数据类型

                返回值-----方法执行结果

                数据类型---基本数据类型【复合数据类型】

                有返回值---方法体中的最后一句话是“return”,方法的返回值数据类型一定是结果值的具体数据类型

                没有返回值---方法体中的没有“return”,方法的返回值数据类型void代替。

          (3).方法的名称---合法的标识符【首字母小写,从第二个单词开始首字母大写】

          (4.)参数列表

               参数----引入本方法以外的数据进入本方法进行运算【找帮手】局部变量

               列表----可以有多个

               没有参数的时候--()中的内容是空的

           (5.)方法体--方法的身体【具体执行代码】

例如:

 

//--- 没有返回值,没有参数的实例方法
public   void  test1()
{ 
    
} 

//---返回值为int,没有参数的实例方法
public   int   test2()
{
    return 12;
}

//---- 没有返回值,有参数1个int型参数的实例方法
public   void  test3(int a)
{
    
} 

//---返回值为String的,有一个UserBean参数的实例方法。
public  String test4(UserBean user)
{ 
     return “hello”;
}

public   Student  test5(UserBean user,int num,char  value)
{  
    return null;
}

   2.静态方法格式

      实例方法的访问限制修饰符后面加上static关键字的方法就是静态方法【类方法】, 没有static关键字的方法就是实例方法

例如:

//--- 没有返回值,没有参数的静态方法【类方法】
public static  void  test1()
{

} 
//---返回值为int,没有参数的静态方法【类方法】
public static   int   test2()
{ 
    return test2;
}
//---- 没有返回值,有参数1个int型参数的静态方法【类方法】
public static  void  test3(int a)
{

}
//---返回值为String的,有一个UserBean参数的静态方法【类方法】。
public static  String test4(UserBean user)
{  
    return “hello”;
}

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){}  
}

二、什么是方法重载?

在同一个类中方法的名称相同,参数不一样,这种现象就叫方法重载。

注意:(1) 方法重载与方法的返回值类型没有关系         

public  class  UserBean{
public  void  test1(){}
public  int   test1(int num){return 0;}
}

           (2) 在同一个类方法中方法名称相同参数不同  ---参数不一样---先看个数,后看类型

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  
}

           (3)1.实例方法重载  2.静态方法重载  3.构造方法重载  都可以重载

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

在用一个类中:

1.构造方法中:可以访问实例变量/类变量/局部变量

                       (1.)构造方法中访问 实例变量:  默认this.实例变量this可以被省略。

                       (2.)构造方法中访问 类变量:     默认类名.实例变量也可以this.类变量类名/this可以被省略

                       (3.)构造方法中访问 局部变量:  直接变量名称

2.实例方法中:可以访问实例变量/类变量/局部变量

                       (1.)实例方法中访问 实例变量:  默认this.实例变量this可以被省略。

                       (2.)实例方法中访问 类变量:     默认类名.实例变量也可以this.类变量类名/this可以被省略

                       (3.)实例方法中访问 局部变量:  直接变量名称

3.静态方法中:  可以访问类变量/局部变量,不可以访问实例变量

                        (1.)静态方法中访问 类变量: 默认类名.实例变量类名可以被省略

                        (2.)静态方法不能有this  (static是属于类的,this是对象指针)

                        (3.)静态方法中访问 局部变量: 直接变量名称

 

public class  Person{
       public  int  perid=1001;//实例变量
       public static  String pername="zhangsan";//类变量
       
       
       //构造方法中可以访问实例变量/类变量/局部变量
       public  Person(){
		char  sex='男'; //局部变量
		//构造方法中访问实例变量默认this.实例变量,this可以被省略。
		System.out.println("构造方法中-实例变量-perid【默认】=="+this.perid);
		System.out.println("构造方法中-实例变量-perid=="+perid);
		//构造方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
		System.out.println("构造方法中-类变量-pername【类名】=="+Person.pername);
		System.out.println("构造方法中-类变量-pername【this】=="+this.pername);
		System.out.println("构造方法中-类变量-pername=="+pername);
		//构造方法中访问局部变量直接变量名称
		System.out.println("构造方法中-局部变量-sex=="+sex);
	}

     
     //实例方法中可以访问实例变量/类变量/局部变量
	public  void  testMehtod1(){
		char  sex='男'; //局部变量
		//实例方法中访问实例变量默认this.实例变量,this可以被省略。
		System.out.println("实例方法中-实例变量-perid【默认】=="+this.perid);
		System.out.println("实例方法中-实例变量-perid=="+perid);
		//实例方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
		System.out.println("实例方法中-类变量-pername【类名】=="+Person.pername);
		System.out.println("实例方法中-类变量-pername【this】=="+this.pername);
		System.out.println("实例方法中-类变量-pername=="+pername);
		//实例方法中访问局部变量直接变量名称
		System.out.println("实例方法中-局部变量-sex=="+sex);
	}

    
    //静态方法中不可以访问实例变量变量
	//静态方法中可以访问类变量/局部变量
	
	public static  void  testStaticMehtod(){
		char  sex='男'; //局部变量
		//System.out.println("静态方法中-实例变量-perid=="+perid);//错误
		//静态方法中访问类变量默认类名.实例变量,类名可以被省略
		System.out.println("实例方法中-类变量-pername【类名】=="+Person.pername);
		//静态方法中不能有this
		//System.out.println("实例方法中-类变量-pername【this=="+this.pername);
		System.out.println("静态方法中-类变量-pername=="+pername);
		//静态方法中访问局部变量直接变量名称
		System.out.println("静态方法中-局部变量-sex=="+sex);
	}
}

测试类:

public  class  TestMain{
	public static void main(String args[]){
	   Person per1=new Person();
	   per1.testMehtod1();
       per1.testStaticMehtod();
	}
}

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

在用一个类中:

1.构造方法中:可以访问其他的 构造方法/实例方法/类方法

                       (1.)构造方法中访问 其他的构造方法: new  其他的构造方法;

                       (2.)构造方法中访问 实例方法:     默认this.实例方法,this可以被省略

                       (3.)构造方法中访问 类方法:  默认类名.类方法,也可以this.类方法,类名/this可以省略

2.实例方法中:可以访问其他的 构造方法/其它实例方法/类方法

                       (1.)实例方法中访问 构造方法: new  构造方法;

                       (2.)实例方法中访问 实例方法:     默认this.实例方法,this可以被省略

                       (3.)实例方法中访问 类方法:  默认类名.类方法也可以this.类方法, 类名/this可以省略

3.静态方法中:可以访问 构造方法/其他的静态方法不可以访问实例方法

                       (1.)静态方法中访问 构造方法: new  构造方法;

                       (2.)静态方法不能有this

                       (3.)静态方法中访问 类方法:  默认类名.类方法类名可以省略

4.为什么静态方法中不可以访问实例元素?

静态方法内存分配时机早于实例元素的内存分配时机,静态方法访问实例元素的时候,实例元素是不存在。

5.为什么静态方法可以访问构造方法?

构造方法是特殊的方法,是类初始化的入口,构造方法不需要实例化对象就能使用

(jvm中有类加载器第一次加载类时构造方法也会随着类一起加载分配内存空间,jvm中的类加载器第一次加载类时会执行类中的static域,jvm会专门划分一个内存区域给static程序块,可称为静态区,属于static这个类而this指针指向的是类的对象,在实例化对象(new)时jvm会在堆区分配内存给一个具体对象,this指针指向的是这个对象,而类中的static域始终是在静态区分配内存 this指向了堆区所以不能调用。)

所以静态方法可以访问构造方法,并且不能使用this。

public  class  Test6{
	//同一个类中,方法与方法的关系
	//1.构造方法访问其他的方法
	//构造方法可以访问其他的构造方法,new 构造方法
	//构造方法可以访问实例方法,默认this.实例方法,this.可以省略
	//构造方法可以访问类方法,默认类名.类方法,也可以this.类方法,类名.this.可以省略		
	public  Test6(){
		//new Test6("zhangsan");
		//this.shiliMethod("lisi");
		//shiliMethod("lisi");
		//Test6.staticMethod("wangwu");
		//this.staticMethod("wangwu");
		//staticMethod("wangwu");
	}
        
	public  Test6(String name){
	  System.out.println("有参数的构造方法,参数name=="+name);
	}
	//2.实例方法访问其他的方法
	//实例方法可以访问构造方法,new 构造方法
	//实例方法可以访问其他实例方法,默认this.实例方法,this.可以省略
	//实例方法可以访问类方法,默认类名.类方法,也可以this.类方法,类名.this.可以省略	
	public void  shiliMethod(){
		new Test6("zhangsan");
		this.shiliMethod("lisi");
		shiliMethod("lisi");
		Test6.staticMethod("wangwu");
		this.staticMethod("wangwu");
		staticMethod("wangwu");
	}
	
	public void  shiliMethod(String name){
		System.out.println("有参数的实例方法,参数name=="+name);
	}
	//3.静态方法访问其他的方法
	//静态方法中绝对不能有this
	//静态方法可以访问构造方法,new 构造方法
	//静态方法不可以访问实例方法
	//静态方法可以访问其他类方法,默认类名.类方法,类名.可以省略
	public static void  staticMethod(){
		new Test6("zhangsan");
		//错误
		//this.shiliMethod("lisi");
		//错误
		//shiliMethod("lisi");
		Test6.staticMethod("wangwu");
		//错误
		//this.staticMethod("wangwu");
		staticMethod("wangwu");
	}
	public static void staticMethod(String name){
		System.out.println("有参数的静态方法,参数name=="+name);
	}
}

测试类:

public  class  TestMain{
	public  static void  main(String args[]){
	

		//测试方法访问方法
		//测试构造方法访问其他方法
		//new Test6();
		//测试实例方法访问其他方法
		//Test6 t6=new Test6();
		//t6.shiliMethod();
		//测试静态方法访问其他方法
		Test6 t6=new Test6();
		t6.staticMethod();
	}
	
}

 

总结:

1.类是什么?

         类是一种抽象的概念,用来描述具有共同性质的一组事物的自定义符合数据类型

2.成员变量与局部变量的特征?

             1.成员变量【全局变量】---类中方法外

                    (1.)可以使用访问限制修饰符,也可以不使用。

                    (2.)可以不用赋予初始值,系统自动赋予默认值,也可以根据需要自己设置一个初始值。

                    (3.)可以在本类中的任意一个方法中被使用

            2.局部变量-----方法里/方法参数

                  (1.)不能使用访问限制修饰符。

                  (2.)必须设置初始值

                  (3.)只能在本方法中使用。

3.实例变量与静态成员变量的区别?

都是成员变量,都具有成员变量的特征,

有static关键字修饰的是静态成员变量,没有则是实例变量,

静态成员变量又叫类变量会在程序运行前分配数据内存空间,可以多个同类对象之间共享数据(共用一个内存空间),可以使用对象访问,也可以使用类名访问

实例变量是在程序运行时分配数据内存空间,不能在多个同类对象之间共享数据值(内存空间是独立的),只能使用对象访问

 

4.成员变量的隐藏?

     在同一个类中成员变量与某一个方法中的局部变量的名称相同,这是我们在方法中使用这个成员变量的时候,得到的结果是局部变量的值,此时就是方法中的局部变量将类中成员变量的值隐藏了,这就是成员变量的隐藏。 如果需要访问被隐藏的成员变量的值,怎么办?通过this.成员变量的名称来调用变量

5.同一个类方法如何访问变量?

1.构造方法中:可以访问实例变量/类变量/局部变量

                       (1.)构造方法中访问 实例变量:  默认this.实例变量, this可以被省略。

                       (2.)构造方法中访问 类变量:     默认类名.实例变量, 也可以this.类变量, 类名/this可以被省略

                       (3.)构造方法中访问 局部变量:  直接变量名称

2.实例方法中:可以访问实例变量/类变量/局部变量

                       (1.)实例方法中访问 实例变量:  默认this.实例变量, this可以被省略。

                       (2.)实例方法中访问 类变量:     默认类名.实例变量, 也可以this.类变量, 类名/this可以被省略

                       (3.)实例方法中访问 局部变量:  直接变量名称

3.静态方法中:  可以访问类变量/局部变量,不可以访问实例变量

                        (1.)静态方法中访问 类变量: 默认类名.实例变量, 类名可以被省略

                        (2.)静态方法中不能有this  (static是属于类的,this是对象指针)

                        (3.)静态方法中访问 局部变量: 直接变量名称

6.同一个类方法如何访问方法?

1.构造方法中:可以访问其他的 构造方法/实例方法/类方法

                       (1.)构造方法中访问 其他的构造方法: new  其他的构造方法;

                       (2.)构造方法中访问 实例方法:     默认this.实例方法,this可以被省略

                       (3.)构造方法中访问 类方法:  默认类名.类方法,也可以this.类方法,类名/this可以省略

2.实例方法中:可以访问其他的 构造方法/其它实例方法/类方法

                       (1.)实例方法中访问 构造方法: new  构造方法;

                       (2.)实例方法中访问 实例方法:     默认this.实例方法,this可以被省略

                       (3.)实例方法中访问 类方法:  默认类名.类方法, 也可以this.类方法, 类名/this可以省略

3.静态方法中:可以访问 构造方法/其他的静态方法,不可以访问实例方法

                       (1.)静态方法中访问 构造方法: new  构造方法;

                       (2.)静态方法中不能有this

                       (3.)静态方法中访问 类方法:  默认类名.类方法, 类名可以省略

7.方法的重载?

在同一个类中方法的名称相同,参数不一样,这种现象就叫方法重载。

(1) 方法重载与方法的返回值类型没有关系 

 (2) 在同一个类方法中方法名称相同参数不同  ---参数不一样---先看个数,后看类型

 (3)1.实例方法重载  2.静态方法重载  3.构造方法重载  都可以重载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值