一、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也就是递归结束,然后才开始输出打印
2.阶乘问题
阶乘与打印相似,但递归结束后是return。从n=1一直返回值到n=5
3.递归使用时的重要规则
1. 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
2. 方法的局部变量是独立的,不会互相影响,比如n变量
3. 如果方法中使用的时引用类型变量(比如数组),就会共享该引用类型的数据
4. 递归必须向退出的条件逼近,否则就是无限递归,就会出现StackoverflowError,死鬼了:)
5. 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。