一、 成员属性和成员方法
上课知识点
public class PersonTest {
public static void main(String[] args) {
Person p = new Person();
p.name = "小牛";
p.age = 18;
System.out.println(p.name);
System.out.println(p.age);
System.out.println("------------");
User user = new User();
p.u = user;
p.u.w = 180;
System.out.println(p.name +"的体重" +p.u.w);
}
}
-----------------------------
public class Person {
int number;
String name;
int age;
User u;
}
class User{
int w;
}
/*
小牛
18
------------
小牛的体重180
*/
课后作业
public class PersonTest {
public static void main(String[] args) {
System.out.println("------User--------");
User user = new User();
user.setNumber(123456);
user.setAge(18);
// System.out.println(user.getNumber()+"的年龄是"+user.getAge());
System.out.println(user.toString());
System.out.println("------Student--------");
Student stu = new Student();
user.t = stu;
user.t.setW(180);
System.out.println("您的体重是"+ user.t.getW()+",应该减肥了啊!");
System.out.println("------Address--------");
Address address = new Address();
stu.a = address;
stu.a.setAddressName("小牛");
System.out.println("我是"+ stu.a.getAddressName());
}
}
-------------------------------------
public class User {
private int number;
private int age;
Student t;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return getNumber() + "的年龄是" + getAge() + "。";
}
}
class Student {
private int w;
Address a;
public int getW() {
return w;
}
public void setW(int w) {
this.w = w;
}
}
class Address{
private String addressName;
public String getAddressName() {
return addressName;
}
public void setAddressName(String addressName) {
this.addressName = addressName;
}
}
/*
------User--------
123456的年龄是18
------Student--------
您的体重是180,应该减肥了啊!
------Address--------
我是小牛
*/
更改后的代码为:
上面那个通过user.t.a拿不到里面的getaddressName方法,通过和朋友讨论,更改后在不同的class里面new三个对象出来,在堆内存中开辟三个空间。通过调用拿到Address里面的getaddressName方法。
public class PersonTest {
public static void main(String[] args) {
/* System.out.println("------User--------");
User user = new User();
user.setNumber(123456);
user.setAge(18);
// System.out.println(user.getNumber()+"的年龄是"+user.getAge());
System.out.println(user.toString());
System.out.println("------Student--------");
Student stu = new Student();
user.t = stu;
user.t.setW(180);
System.out.println("您的体重是"+ user.t.getW()+",应该减肥了啊!");
System.out.println("------Address--------");
Address address = new Address();
stu.a = address;
stu.a.setAddressName("小牛");
System.out.println("我是"+ stu.a.getAddressName());
*/
User user = new User();
user.stu.ar.setAddressName("小牛");
System.out.println(user.stu.ar.getAddressName());
}
}
class User{
Student stu = new Student();
}
class Student{
Address ar = new Address();
}
class Address{
private String addressName;
public String getAddressName() {
return addressName;
}
public void setAddressName(String addressName) {
this.addressName = addressName;
}
}
/*
小牛
*/
二、成员变量和局部变量的区别
1.定义的位置不一样
局部变量:在方法的内部
成员变量:在方法的外部,直接写在类当中
2.作用范围不一样
局部变量:只有方法当中才可以使用,出了方法就不能再用
成员变量:整个类全都可以通用。
3.默认值不一样
局部变量:没有默认值,如果要想使用必须手动进行赋值
成员变量:如果没有赋值,会有默认值
4.内存的位置不一样
局部变量:位于栈内存
成员变量:位于堆内存
5.生命周期不一样
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
三、认识构造方法
产生对象的方法叫做构造方法,也叫作构造器。
public class Demo2 {
private int age;
private String name;
//无参构造
public Demo2() {}
//有参构造
public Demo2(int age) {
this.age = age;
}
public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
public void setName(String useName) {
name = useName;
}
public String getName() {
return name;
}
}
package newdemo;
class Demo1 {
public static void main(String[] args)
{
Demo2 p = new Demo2();
p.setAge(18);
p.setName("牛牛");
System.out.println(p.getAge()+"的"+p.getName());//18的牛牛
}
}
构造方法的作用:
- 在堆内存中生成对象
- 给对象成员属性赋初始值
- 无参构造,基础数据类型的默认值是0,引用数据类型的初始值是null。
- 只有构造器被执行以后,才会生成对象。