类与对象

  • 一、Java创建对象流程简单分析
  • 二、方法的使用
  • 三、方法的传参机制
  • 四、递归
  • 1.打印问题
  • 2.阶乘问题
  • 3.递归使用时的重要规则


一、Java创建对象流程简单分析

Person p = new Person();
p.name = “jack”;
p.age = 10

1.先加载Person类信息(属性和方法信息,只会加载一次)
2.在堆中分配空间,进行默认初始化
3.把地址赋给p,p就指向对象
4.进行指定初始化,比如p.name = “jack” p.age = 10

二、方法的使用

public class lei{
    public static void main(String[] args) {
    // 创建Person对象
    // p1是对象名
    // new Person()创建的对象空间(数据)才是真正的对象
        Person p1 = new Person();
        // 方法的调用
        p1.age=10;
        System.out.println(p1.age+p1.name+p1.sal+p1.isPass);
        p1.speak();
        // p1.cal1(999);调用cal1方法,同时把999传给n
        p1.cal1(999);
        // 同时使用多个变量
        int returnsum = p1.cal2(33,44);
        System.out.println(returnsum);

    }
}
class Person{
    int age;
    String name;
    double sal;
    boolean isPass;
    public void speak(){
        System.out.println("wsyghr");
    }
    public void cal1(int n){
        int res = 0;
        for (int i = 0;i<=n ;i++ ) {
            res+=i;
            
        }
        System.out.println(res);
    }
    // public int cal2其中的(int)表示方法执行后,返回一个int值
      public int cal2(int x,int y){
        int sum = x+y;
        return sum;
            
        }
        
}

三、方法的传参机制

当传入方法的数据为基本数据类型时,在方法中改变了数据的值,主方法的数据不会因此改变
例如:

public class fangfa{
    public static void main(String[] args) {
         Person p1 = new Person();
         int x = 10;
         int y = 90;
        p1.exchange(x,y);
        System.out.println("x="+x+"y="+y);

 }
}
class Person{
    int temp = 0 ;
    public void exchange(int x,int y){
        temp=x;
        x=y;
        y=temp;
         System.out.println("x="+x+"y="+y);  
        }
}

它的输出结果为:
x=90 y=10
x=10 y=90
但是如果传入的数据为引用类变量(例如:数组和对象)时,他会因方法语句而改变,从而改变主方法的数组

四、递归

递归就是方法自己调用自己,每次调用时传入不同的变量。

1.打印问题

先从n=5一直开栈到n=2也就是递归结束,然后才开始输出打印

java使用pem文件 java person_java使用pem文件

2.阶乘问题

阶乘与打印相似,但递归结束后是return。从n=1一直返回值到n=5

java使用pem文件 java person_jvm_02

3.递归使用时的重要规则

1. 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
2. 方法的局部变量是独立的,不会互相影响,比如n变量
3. 如果方法中使用的时引用类型变量(比如数组),就会共享该引用类型的数据
4. 递归必须向退出的条件逼近,否则就是无限递归,就会出现StackoverflowError,死鬼了:)
5. 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。