方法
方法 :就是一套功能,类似学过的函数(方法不能嵌套,定义在类块当中)
* 1.访问控制符 public(后期修改,小白先写这个)
* 2.修饰符static:静态,静态方法可以被另一个静态方法直接调用(后期修改,小白先写这个)
* 3.方法的返回值(void:无返回值,任意的数据类型;利用return返回对应类型的数据)
* 4.方法的形参
* 5.方法体
注意:
* 方法如果想要被执行,需要被调用
* 不要把打印的数据当做返回值
* return两个作用:返回数据,终止方法。
* 基本数据类型传递的是数值,二引用数据类型传递的是引用。
如果方法有返回值,若出现if(){return};return x;如果条件成立,则第二个return不生效。(跳出方法了)
package com.zpwd.chapter5_0305;
public class Demo1 {
public static void getSum() { // 无参,无返回值
int num1 = 10;
int num2 = 20;
System.out.println(num1 + num2);
return;
// 没有返回值的方法是可以有return的,作用:跳出该方法
}
public static int getSum1() { // 无参,有返回值
int num1 = 10;
int num2 = 20;
return num1 + num2;
}
public static int sum(int num1, int num2) {// 形参 // 有参,有返回值
int sum1 = num1 + num2;
return sum1;
}
public static void main(String[] args) {
getSum();
System.out.println(getSum1());
int a = sum(1, 2);//实参
System.out.println(a);
}
}
面试题
1.给出结果
package com.zpwd.chapter5_0305;
public class Test1 {
// 面试题1:给出结果
public static void main(String[] args) {
int x = 10;
System.out.println(x); // 该x输出的是main栈针下的x
getNum(x); // 该x传入main栈针下的x,但改变的是getNum栈针下的x
System.out.println(x); // 该x输出的是main栈针下的x
}
private static int getNum(int x) {
x = 3 * x;
return x;
// TODO Auto-generated method stub
}
}
注意该题,变量x分别在两个方法中声明,变量是存放在栈内存中的,执行一个方法时会压入该方法的栈针。两个变量x分别存放在不同的栈针内,说明两个x不是同一个变量,因为作用域不同。两个System.out.println(x);都输出的是main栈针下的变量,所以结果为10 和 10。
2.给出结果
package com.zpwd.chapter5_0305;
public class Test2 {
// 面试题2:给出结果
public static void main(String[] args) {
// 堆中存放的是数组
int x[] = { 10 };// 压入main栈针,声明数组变量(存放的是地址,指向堆中对应的地址,数组第一个元素值为10)
System.out.println(x[0]); // 该x输出的是堆中x数组的第一个元素
getNum(x); // 改变对中的x数组第一个元素的值
System.out.println(x[0]); // 该x输出的是堆中的改变后的x数组的第一个元素
}
private static void getNum(int x[]) {
// TODO Auto-generated method stub
x[0] = x[0] * 3;
}
}
注意该题,数组x分别在两个方法中声明,但是数组存放在堆内存中的,这个数组在这个堆中只有一个,所以一个方法改变了该数组,会影响另一个方法对该数组的输出。(数组中的值改变了),所以结果为10 和 30。
方法的重载
重载:在一个类中,不允许声明同名且同参的方法。(重载也叫:静态多态,编译时多态,overload)
public class MethodDemo6 {
// 前提:在一个class中,不允许声明同名且同参的方法
public static int test1(double a,int i) {
return 1;
}
public static double test1(int i,double a) {
return 1.1;
}
public static void main(String[] args) {
// 重载(静态多态,编译时多态,overload):在一个类中,同名不同参的方法
test1(1.0,1);
}
}
构造方法的重载
public class Demo3 {
public Demo3() {
}
public Demo3(int num) { // 构造方法的重载
}
}
特殊的方法:构造器(构造方法)
- 1.构造方法的名称必须与类名称一致
- 2.没有返回值,没有void
- 3.不能用static修饰
- 4.作用:实例化对象,为对象属性赋值。
- 5.当一个类没有写构造方法时,JVM会给这个类提供一个空的,无参的构造方法。
- 一旦存在有参的构造方法,JVM不再提供无参的构造方法。
面试题
package com.zpwd.chapter6_0306;
class Test {
String name; // 默认值为NULL
int age; // 默认值为0
public void show() {
System.out.println(name);
}
}
public class Demo2 {
public static void main(String[] args) {
Test t = new Test();
t.show();
System.out.println(t.age);
}
}
- 全局变量是有默认值的。
- 全局变量类型与默认值:整型,0;浮点型,0.0;布尔型,false;字符型,\u0000;引用数据类型:null
输出结果为:null和0
package com.zpwd.chapter6_0306;
class Test3 {
String name;
public void show(String name) { // 全局变量name和形参name同时存在时
System.out.println(name);// 该name指向最近的一个name.
// 要是想输出全局变量name,则System.out.println(this.name);
}
}
public class Demo3 {
public static void main(String[] args) {
Test3 t = new Test3();
t.name = "张三";
t.show("李四");
}
}
输出结果为:李四
- 全局变量name和形参name同时存在时,show()方法中的name因就近原则,取离他最近的name。形参的name近
- 如果想用全局变量的name,用this关键字。
谈谈垃圾自动回收(gc):JVM会把那些堆内存中没有引用的对象视为垃圾对象,这些对象在执行完指定工作后,JVM会自动找到这些垃圾对象,调用其finalize()方法回收其内存。
产生没有引用的对象:
-
Demo d=null;
-
new Demo1().test2();
网友评论