类和对象_2
7.Java类中方法的表现形式及其基本特征?
Java类中方法是为了描述具有共同性质的一组数物的基本功能/行为。
Java类中方法的表现形式
-
1.实例方法格式
访问限制修饰符 方法的返回值数据类型 方法的名称(参数列表){方法体} -
1.1.访问限制修饰符—public 缺省的
-
1.2.方法的返回值数据类型
返回值-----方法执行结果
数据类型—基本数据类型【复合数据类型】
有返回值—方法体中的最后一句话是“return”,方法的返回值数据类型一定是结果值的具体数据类型
没有返回值—方法体中的没有“return”,方法的返回值数据类型void代替。 -
1.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;}
-
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;}
-
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){}
}
8.什么是方法重载?
在同一个类中方法的名称相同,参数不一样,这种现象就叫方法重载。
注意:方法重载与方法的返回值类型没有关系
例如:
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
}
构造方法、实例方法、静态方法都是可以重载的。
9.同一个Java类中方法与变量的调用关系?
package 十二月9号;
public class Student {
/**
* 测试在同一个java类中方法与变量的调用关系
*/
public int classes=1001;//实例变量
public static String name="zhangsan";//类变量
//构造方法中可以访问实例变量/类变量/局部变量
//构造方法
public Student() {
char sex='男'; //局部变量
//构造方法中访问实例变量默认this.实例变量,this可以被省略。
System.out.println("构造方法中-实例变量-classes【默认】=="+this.classes);
System.out.println("构造方法中-实例变量-classes=="+classes);
//构造方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
System.out.println("构造方法中-类变量-name【类名】=="+Student.name);
System.out.println("构造方法中-类变量-name【this】=="+this.name);
System.out.println("构造方法中-类变量-name=="+name);
//构造方法中访问局部变量直接变量名称
System.out.println("构造方法中-局部变量-sex=="+sex);
}
//实例方法
//实例方法中可以访问实例变量/类变量/局部变量
public void testMehtod1() {
char sex='男'; //局部变量
//实例方法中访问实例变量默认this.实例变量,this可以被省略.
System.out.println("实例方法中-实例变量-classes【默认】=="+this.classes);
System.out.println("实例方法中--实例变量-classes=="+classes);
//实例方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
System.out.println("实例方法中-类变量-name【类名】=="+Student.name);
System.out.println("实例方法中-类变量-name【this】=="+this.name);
System.out.println("实例方法中-类变量-name=="+name);
//实例方法中访问局部变量直接变量名称
System.out.println("实例方法中--局部变量=="+sex);
}
//静态方法
//静态方法中不能访问实例变量,可以访问类变量、局部变量
public static void testtestStaticMehtod() {
char sex='男';
//System.out.println("静态方法中-实例变量-classes=="+classes);//错误
//静态方法中访问类变量默认类名.实例变量,类名可以被省略
System.out.println("静态方法中-类变量-Student【类名】=="+Student.name);
//静态方法中不能有this
//System.out.println("实例方法中-类变量-pername【this=="+this.name);
System.out.println("静态方法中-类变量-name=="+name);
//静态方法中访问局部变量直接变量名称
System.out.println("静态方法中-局部变量-sex=="+sex);
}
}
测试类:
package 十二月9号;
public class TestMain {
public static void main(String[] args) {
Student s1=new Student();
s1.testMehtod1();
s1.testtestStaticMehtod();
}
}
总结:
在用一个类中:
构造方法中可以访问实例变量/类变量/局部变量
//构造方法中访问实例变量默认this.实例变量,this可以被省略。
//构造方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
//构造方法中访问局部变量直接变量名称
实例方法中可以访问实例变量/类变量/局部变量
//实例方法中访问实例变量默认this.实例变量,this可以被省略。
//实例方法中访问类变量默认类名.实例变量,也可以this.类变量,类名/this可以被省略
//实例方法中访问局部变量直接变量名称
静态方法中可以访问类变量/局部变量,不可以访问实例变量
//静态方法中访问类变量默认类名.实例变量,类名可以被省略
//静态方法中不能有this
//静态方法中访问局部变量直接变量名称
10.同一个Java类中方法与方法的调用关系?
public class Method {
private int name;
//测试在同一个类中方法与方法的调用关系
//构造方法
//1.构造方法访问其他的方法
//构造方法可以访问其他的构造方法,new 构造方法
//构造方法可以访问实例方法,默认this.实例方法,this.可以省略
//构造方法可以访问类方法,默认类名.类方法,也可以this.类方法,类名.this.可以省略
public Method() {
new Method("zhangsan");//调用带参构造方法
this.shiliMethod1("lisi");//调用带参实例方法
shiliMethod1("lisi");//调用带参实例方法
Method.staticMethod1("wangwu");//调用带参静态方法
this.staticMethod1("wangwu");//调用带参静态方法
staticMethod1("wangwu");//调用带参静态方法
}
//构造方法带参数
public Method(String name) {
System.out.println("有参数的构造方法,参数name=="+name);
}
//实例方法
public void shiliMethod1() {
new Method("zhangsan");//调用带参构造方法
this.shiliMethod1("lisi");//调用带参实例方法
shiliMethod1("lisi");//调用带参实例方法
Method.staticMethod1("wangwu");//调用带参静态方法
this.staticMethod1("wangwu");//调用带参静态方法
staticMethod1("wangwu");//调用带参静态方法
}
//实例带参方法
public void shiliMethod1(String name) {
System.out.println("有参数的实例方法,参数name=="+name);
}
//静态方法
public static void staticMethod1() {
new Method("zhangsan");//调用带参构造方法
//this.shiliMethod1("lisi");//调用带参实例方法(报错,不能有this关键字)
//shiliMethod1("lisi");//调用带参实例方法(报错,不能调用实例方法)
Method.staticMethod1("wangwu");//调用带参静态方法
//this.staticMethod1("wangwu");//调用带参静态方法(报错,不能有this关键字)
staticMethod1("wangwu");//调用带参静态方法
}
*/
//静态带参方法
public static void staticMethod1(String name) {
System.out.println("有参数的静态方法,参数name=="+name);
}
}
测试类:
测试构造方法与其他方法的关系:
public class TestMethod {
public static void main(String[] args) {
System.out.println("调用无参构造方法");
new Method();
}
}
测试类:
测试实例方法与其他方法的关系:
public class TestMethod {
public static void main(String[] args) {
Method m1=new Method();
System.out.println("调用无参实例方法");
m1.shiliMethod1();
}
}
测试类:
测试静态方法与其他方法的关系:
public class TestMethod {
public static void main(String[] args) {
Method m1=new Method();
System.out.println("调用无参静态方法");
m1.staticMethod1();
}
}
总结:
在用一个类中:
构造方法中可以访问其他的构造方法/实例方法/类方法
//构造方法中访问其他的构造方法new 其他的构造方法;
//构造方法中访问实例方法默认this.实例方法,this可以被省略
//构造方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略
实例方法中可以访问构造方法/其他实例方法/类方法
//实例方法中访问构造方法默认new 构造方法
//实例方法中访问其他实例方法默认this.其他实例方法,this可以被省略
//实例方法中访问类方法默认类名.类方法,也可以this.类方法,类名/this可以省略
静态方法中可以访问构造方法/其他的静态方法,不可以访问实例方法
//静态方法中访问构造方法new 构造方法
//静态方法中不能有this
//静态方法中访问类方法默认类名.类方法,类名可以省略
为什么静态方法中不可以访问实例元素?
静态方法内存分配时机早于实例元素的内存分配时机,静态方法访问实例元素的时候,实例元素是不存在。