1、对象存在形式:
public class First {
public static void main(String[] args) {
// Cat cat;
// cat = new Cat();
Cat cat = new Cat();
cat.name = "小黑";
cat.age = 19;
cat.color = "red";
}
}
class Cat {
String name;
int age;
String color;
}
Person p1 = new Person();
p1.age = 10;
p1.name = "liming";
Person p2 = p1;
System.out.println(p2.age); // 10
2、类和对象的内存分配机制:
1、栈:一般存放基本数据类型(局部变量)。
2、堆:存放对象(如Cat cat,数组等)。
3、方法区:常量池(常量,如字符串值),类加载信息。
3、java创建对象流程简单分析:
1、先加载类信息(主要是属性、方法信息),类加载只会加载一次,就算再创建一个对象,也只会加载一次。
2、堆中分配空间,进行默认初始化(String->null, int->0)。
3、将堆中空间地址分配给p,p就指向该对象。
4、进行指定初始化,比如:p.name = “jack”, p.age=10
4、java方法执行机制:
5、方法练习题:
第一题:输入一个数判断奇偶
public class First {
public static void main(String[] args) {
AA aa = new AA();
if (aa.isOdd(3)) {
System.out.println("是偶数");
} else {
System.out.println("是奇数");
}
}
}
class AA {
public boolean isOdd(int n1) {
return n1 % 2 == 0;
}
}
6、注意事项:
6.1、基本数据类型传参机制:值拷贝
1、方法里面的变量不会影响主栈里面的变量。
因为他调用方法的时候会产生一个新栈,两个栈互不影响。
public class text {
public static void main(String[] args) {
AB ab = new AB();
int n1 = 10;
int n2 = 20;
ab.Text(n1, n2);
System.out.println("n1=" + n1 + "n2=" + n2); // 10, 20
}
}
class AB {
public void Text(int n1, int n2) {
System.out.println("n1=" + n1 + "n2=" + n2); // 10, 20
int temp;
temp = n1;
n1 = n2;
n2 = temp;
System.out.println("n1=" + n1 + "n2=" + n2); // 20, 10
}
}
6.2、引用数据类型传参机制:地址拷贝(形参影响实参)
1、方法里面修改值,也会影响主栈的值。
public class text {
public static void main(String[] args) {
Person p = new Person();
p.age = 10;
B b = new B();
/*
1、传递对象实际上是传递的地址值,该地址值指向堆中的空间。
b.test(p); p:就是new Person的地址,将该方法指向new Person的空间
*/
b.test(p);
System.out.println(p.age); // 1000
}
}
class Person {
String name;
int age;
}
class B {
public void test(Person p) {
p.age = 1000;
}
}
7、对象拷贝:
public class Persons {
public static void main(String[] args) {
Person1 person1 = new Person1();
person1.age = 10;
person1.name = "liming";
myTools myTools = new myTools();
Person1 p2 = myTools.copyObj(person1);
}
}
class Person1 {
int age;
String name;
}
class myTools {
public Person1 copyObj(Person1 p1) {
Person1 person2 = new Person1();
person2.name = p1.name;
person2.age = p1.age;
return person2;
}
}