javaSE基础--7[类和对象_2]

类和对象_2

1…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){ } ---- 没有返回值,有参数1个int型参数的实例方法
      public String test4(UserBean user){ return “hello”;}—返回值为String的,有一个UserBean参数的实例方法。
      public Student test5(UserBean user,int num,char value){ return null;}–返回值为Student的,有多个(UserBean,int,char)类型参数的实例方法。

   2.静态方法格式
      实例方法的访问限制修饰符后面加上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;}–返回值为Student的,有多个(UserBean,int,char)类型参数的类方法【静态方法】。

   3.构造方法格式
      实例方法格式中去掉方法的返回值数据类型,方法的名称是类名这种方法就叫构造方法。
   例如:

public  class  Person{
    
    
	public  Person(){
    
     } //无参数的构造方法
	public  Person(int num){
    
     }//  有一个int型参数的构造方法
	public  Person(UserBean user){
    
     }//有一个UserBean 型参数的构造方法
	public  Person(UserBean user,int num,char  value){
    
    }//有多个(UserBean ,int,char)类型参数的构造方法。
}

         构造方法作用就是将来为了创建对象用的。
         当一个类创建好以后,会有一个默认的无参数构造方法存在,只是没有显式写出罢了。
         当这个类中出现一个有参数的构造方法时,我们就需要将这个默认的无参数构造方法
显式写出,如果没有显式写出这个默认的无参数构造方法,那么这个默认的无参数构造方法将会被有参数的构造方法覆盖。

public  class  Student{
    
    
	//存在一个默认的无参数构造方法
	public Student(){
    
    }
	public  Student(String name){
    
    }  
}

2.什么是方法重载?
   在同一个类中方法的名称相同,参数不一样,这种现象就叫方法重载。
   注意:方法重载与方法的返回值类型没有关系
   例如:

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  
}

   构造方法、实例方法、静态方法都是可以重载的。
3.同一个Java类中方法与变量的调用关系?

public class  Person{
    
    
	public static void main(String args[]){
    
    
	   Person per1=new Person();
	   per1.testMehtod1();
       per1.testStaticMehtod();
	}
       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);
	}
}


在这里插入图片描述

   总结:
   在用一个类中:
   构造方法中可以访问实例变量/类变量/局部变量
      //构造方法中访问实例变量默认this.实例变量,this可以被省略。
      //构造方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
      //构造方法中访问局部变量直接变量名称

   实例方法中可以访问实例变量/类变量/局部变量
      //实例方法中访问实例变量默认this.实例变量,this可以被省略。
      //实例方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
      //实例方法中访问局部变量直接变量名称

   静态方法中可以访问类变量/局部变量,不可以访问实例变量
      //静态方法中访问类变量默认类名.实例变量,类名可以被省略
      //静态方法中不能有this
      //静态方法中访问局部变量直接变量名称

4.同一个Java类中方法与方法的调用关系?

public  class  Test6{
    
    
	public  static void  main(String args[]){
    
    
		//测试方法访问方法
		//测试构造方法访问其他方法
		new Test6();
		//测试实例方法访问其他方法
		Test6 t6_1=new Test6();
		t6_1.shiliMethod();
		//测试静态方法访问其他方法
		Test6 t6_2=new Test6();
		t6_2.staticMethod();
	}
	
	//同一个类中,方法与方法的关系
	//1.构造方法访问其他的方法
	//构造方法可以访问其他的构造方法,new 构造方法
	//构造方法可以访问实例方法,默认this.实例方法,this.可以省略
	//构造方法可以访问类方法,默认类名.类方法,也可以this.类方法,类名.this.可以省略		
	public  Test6(){
    
    
		System.out.println("构造方法尝试分别调用有参的构造方法/实例方法/静态方法");
		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(){
    
    
		System.out.println("实例方法尝试分别调用有参的构造方法/实例方法/静态方法");
		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(){
    
    
		System.out.println("静态方法尝试分别调用有参的构造方法/实例方法/静态方法");
		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);
	}
}

在这里插入图片描述

   总结:
   在用一个类中:
   构造方法中可以访问其他的构造方法/实例方法/类方法
      //构造方法中访问其他的构造方法new 其他的构造方法;
      //构造方法中访问实例方法默认this.实例方法,this可以被省略
      //构造方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略

   实例方法中可以访问构造方法/其他实例方法/类方法
      //实例方法中访问构造方法默认new 构造方法
      //实例方法中访问其他实例方法默认this.其他实例方法,this可以被省略
      //实例方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略

   静态方法中可以访问构造方法/其他的静态方法,不可以访问实例方法
      //静态方法中访问构造方法new 构造方法
      //静态方法中不能有this
      //静态方法中访问类方法默认类名.类方法,类名可以省略

为什么静态方法中不可以访问实例元素?
      静态方法内存分配时机早于实例元素的内存分配时机,静态方法访问实例元素的时候,实例元素是不存在。

在这里插入图片描述
   1.类是什么?
      1.类–类型–数据类型—复合数据类型—自定义复合数据类型
         为什么有复合数据类型?
            基本数据类型就8种,在开发中远远不够,所以我们就需要一个可以根据自己的需求随时能制作出一个自己需要的数据类型。
      2.类–具有共同性质的一组事物的群体。 人类 [物以类聚人以群分]
   2.成员变量与局部变量的特征?
      成员变量【全局变量】—类中方法外
         1.可以使用访问限制修饰符,也可以不使用。
         2.可以不用赋予初始值,系统自动赋予默认值,也可以根据需要自己设置一个初始值。
         3.可以在本类中的任意一个方法中被使用

----------------------------------------------------------------
      局部变量-----------------------方法里/方法参数
         1.不能使用访问限制修饰符。
         2.必须设置初始值
         3.只能在本方法中使用。

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

静态成员变量【类变量】 实例变量
成员变量【全局变量】
1.可以使用访问限制修饰符,也可以不使用。
2.可以不用赋予初始值,系统自动赋予默认值,也可以根据需要自己设置一个初始值。
3.可以在本类中的任意一个方法中被使用
有static 关键字修饰 没有static 关键字修饰
程序运行前分配数据的内存空间【早】 程序运行时分配数据的内存空间【晚】
可以在多个同类对象之间共享数据值 不能在多个同类对象之间共享数据值
可以使用对象访问也可以使用类名访问 只能使用对象访问
    4.成员变量的隐藏?

      在同一个类中成员变量与某一个方法中的局部变量的名称相同,这是我们在方法中使用这个成员变量的时候,得到的结果是局部变量的值,此时就是方法中的局部变量将类中成员变量的值隐藏了,这就是成员变量的隐藏
      例如:
         //成员变量的隐藏
         //成员变量的名称与局部变量的名称相同
         //局部变量的值会把成员变量的值隐藏
         //注意:成员变量的隐藏与变量是什么数据类型没有关系,只看名称
   5.同一个类方法如何访问变量?
      在同一个类中:
      构造方法中可以访问实例变量/类变量/局部变量
            //构造方法中访问实例变量默认this.实例变量,this可以被省略。
            //构造方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
            //构造方法中访问局部变量直接变量名称

      实例方法中可以访问实例变量/类变量/局部变量
            //实例方法中访问实例变量默认this.实例变量,this可以被省略。
            //实例方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
            //实例方法中访问局部变量直接变量名称

      静态方法中可以访问类变量/局部变量,不可以访问实例变量
            //静态方法中访问类变量默认类名.实例变量,类名可以被省略
            //静态方法中不能有this
            //静态方法中访问局部变量直接变量名称

   6.同一个类方法如何访问方法?
      在同一个类中:
      构造方法中可以访问其他的构造方法/实例方法/类方法
            //构造方法中访问其他的构造方法new 其他的构造方法;
            //构造方法中访问实例方法默认this.实例方法,this可以被省略
            //构造方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略

      实例方法中可以访问构造方法/其他实例方法/类方法
            //实例方法中访问构造方法默认new 构造方法
            //实例方法中访问其他实例方法默认this.其他实例方法,this可以被省略
            //实例方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略

      静态方法中可以访问构造方法/其他的静态方法,不可以访问实例方法
            //静态方法中访问构造方法new 构造方法
            //静态方法中不能有this
            //静态方法中访问类方法默认类名.类方法,类名可以省略

   7.方法的重载?
      在同一个类中方法的名称相同,参数不一样,这种现象就叫方法重载。
      注意:方法重载与方法的返回值类型没有关系
      例如:

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  
}

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

猜你喜欢

转载自blog.csdn.net/m0_49935332/article/details/110923808