概念:
修饰符 返回类型 名称(参数列表)【throw 异常类型列表】{}
只有返回类型不是void的方法才可以将方法执行后的返回值赋给另一个变量
初始化对象
1、一个带有 main 方法类是可以直接运行的,这种类被称作 启动类
2、首次【主动使用】一个类时,将导致该类被初始化,类中的类变量也将初始化
3、所谓【主动使用】一个类包括很多情况,比如这里直接运行一个启动类,或者创建一个类的对象
4、当一个类被初始化后即可反复使用,不会再次执行初始化操作【除非该类被卸载后重新加载】
5、static 代码块仅在首次主动使用一个类时才执行一次
eg:
public class Sheep {
public static String school ; // 类变量 ( static 表示属于类的、与类相关的 )
// 在 static 修饰的代码块中可以完成对 类变量 的初始化
static {
System.out.println( “默认值: “ + school ); // 因为在此之前从来没有为 school 主动赋值
// Sheep.school = “大肥羊学校” ; // 首次为 school 主动赋值就是对该变量的初始化
school = “大肥羊学校” ; // 同一个类中可以省略类名
System.out.println( “初始值: “ + school );
}
public static void main(String[] args) { // 一个带有 main 方法类是可以直接运行的,这种类被称作 启动类
// main 方法中什么都不写
}
}
构造方法
与类同名,无返回类型,不能使用static
赋值表达式最先进行,然后是实例方法,最后是构造方法。
作用:完成实例变量的初始化。
值传递
eg:
public class Elephant {
public void increment( int x ) {
System.out.println( “【 increment 】x = “ + x );//100
x++ ;
System.out.println( “【 increment 】x = “ + x );//101
}
public static void main(String[] args) {
int x = 100 ;
Elephant e = new Elephant();
System.out.println( “【 main 】x = “ + x ); // 100
// 调用任意的一个方法,都会导致产生于该方法本次执行对应的 栈桢
e.increment( x ); // main 调用 e 的 increment 方法
System.out.println( “【 main 】x = “ + x ); // 100
}<br />}<br />![Elephant1.png](https://cdn.nlark.com/yuque/0/2020/png/1332240/1589858550519-8a3c484b-bec7-43bc-89e4-33eb847bd6ac.png#align=left&display=inline&height=399&margin=%5Bobject%20Object%5D&name=Elephant1.png&originHeight=1440&originWidth=2692&size=283032&status=done&style=none&width=746)![Elephant2.png](https://cdn.nlark.com/yuque/0/2020/png/1332240/1589858608975-d6f03d92-0524-4709-8bdd-0226acb1c620.png#align=left&display=inline&height=1416&margin=%5Bobject%20Object%5D&name=Elephant2.png&originHeight=1416&originWidth=2690&size=197101&status=done&style=none&width=2690)![Elephant3.png](https://cdn.nlark.com/yuque/0/2020/png/1332240/1589858622803-b30eed58-977a-4bc3-9722-4df86159fa53.png#align=left&display=inline&height=1424&margin=%5Bobject%20Object%5D&name=Elephant3.png&originHeight=1424&originWidth=2690&size=185779&status=done&style=none&width=2690)<br />为e.increment(x)调用了方法产生了栈帧,栈先进后出,在main前执行。<br />而在main方法中int x=100—->传给了e.increment(x)中的x.increment的x执行x++。 <br />所以x++以后栈帧会消失,而main中的x还是100;
return
1.return 可以导致一个正在执行的方法立即结束(该方法的栈帧从栈中弹出)
2.方法返回值必须和方法返回值类型一样。
3.return 可以将一个方法和栈帧中数据带到方法的调用者。
一个源文件可以存在多个class。
但是源文件的名称必须与public修饰的class名称相同
类传递
public class Undergraduate {
public String name ;
public char gender ;
// 判断 自己 ( 我 ) 和 对方 ( partner ) 是否可以结婚
// 判断 当前对象 ( this ) 和 参数传入的对象 ( partner ) 是否可以结婚
public boolean marry( Undergraduate partner ) {
// 暂时只考虑 性别,异性可以结婚
if( ( this.gender == ‘男’ && partner.gender == ‘女’ ) || ( this.gender == ‘女’ && partner.gender == ‘男’ ) ) {
return true ;
}
return false ;
}
public static void main(String[] args) {
Undergraduate first = new Undergraduate();
first.name = “杨过” ;
first.gender = ‘男’ ;
Undergraduate second = new Undergraduate();
second.name = “郭芙” ;
second.gender = ‘女’ ;
boolean x = second.marry( first ); // 此时,在 marry 内部,this 就表示 second 对应的对象,partner 就表示 first 对应的对象
System.out.println( x );
Undergraduate third = new Undergraduate();
third.name = “小武” ;
third.gender = ‘男’ ;
x = third.marry( first );
System.out.println( x );
}
}
marry(Undergraduate partner)方法中传递的类的值,在方法体中用this表示当前类,用partner表示传递过来的对象。
x = third.marry( first );//third是当前,first是传递的对象