类 对象 方法(1.类&对象&构造方法)
导读:1. 类和对象的内存处理方式 1.1 方法区(method area) 也称静态区,用于存放用户定义的各个类、静态变量等。...
1. 类和对象的内存处理方式
1.1 方法区(method area)
也称静态区 ,用于存放用户定义的各个类 、静态变量等 。1.2 堆(heap)
堆中存放对象和非静态变量 。 在使用new关键字产生对象后 ,对象会存放进堆中进行管理 ,对象名就是对象在堆中的地址。 对象把被它调用的成员变量直接存储到堆中 。 对象把被它调用的成员方法地址存储到堆中 ,间接调用 。 堆中的内容会被垃圾回收器回收 。1.3 栈(stack)
调用的方法都会进入到栈中(包括main方法) ,方法执行完成就出栈 。若调用的是对象的方法 ,则会先进入堆中找到这个方法的地址 ,再根据地址进入方法区进行调用 。2. 对象作为方法的参数和返回值
对象可作为方法的参数
public void fun(Scanner scan){ int i = scan.nextInt(); System.out.println(i); }对象可最为方法的返回值
public Student getStu(){ Student stu = new Student(); stu.setName("XiaoMing"); stu.setAge(11); return stu; }3. 成员变量和局部变量
3.1 基本特征
成员变量位于方法外 ,可供整个类使用;局部变量位于方法内 ,仅它所在的方法可使用 。 成员变量有默认值null,定义时可不赋值;局部变量没有默认值 ,定义时必须赋值 。3.2 内存管理
由于成员变量在类中定义 ,而类实例化为对象后是进入堆中,故成员变量是在堆中进行管理 。 局部变量在方法中定义 ,方法是在栈中进行管理 ,故局部变量也在栈中进行管理 。3.3 生命周期
局部变量在栈中,故最终随方法出栈以结束生命周期 ,周期较短。 成员变量在堆中 ,故最终以垃圾回收的方式结束周期 ,周期较长 。3.4 this关键字的使用
若某个类中 ,局部变量的名称和成员变量名称相同 ,则可使用this关键字对局部变量进行标识 ,以区分两个变量 。 若有多个类 ,则this表示的是造成重名的那个类。4. private型变量的访问
若类中有变量private int age ,则在类以外无法直接访问这个变量 。 若要在类外访问private型变量age ,需在类中定义setAge()和getAge()两个方法,按格式要求 ,变量名age的首字母必须为大写(idea中使用alt+insert可快速创建) 。 setAge()和getAge()方法中可编写访问控制语句。5. 构造方法
构造方法用于创建对象 ,若默认的构造方法无法满足使用需求,可自定义构造方法 ,以替代默认方式 ,在创建对象时提供额外的功能(实现逻辑 、为变量赋值等) 。自定义的构造方法名需和类名相同 。定义构造方法时,无需设置返回值类型 。
public class Student { public Student (){ System.out.println("Im a student"); }; }构造方法可进行重载(可创建多个同名构造方法 ,方法名称相同 ,但参数列表不同 ,使用时根据参数列表进行区分) 。
public class Student { public Student (){ System.out.println("Im a student"); }; public Student(String name,int age){ System.out.println("My name is"+name+", Im "+age+"years old"); } }同一个类中的无参构造方法可用this调用本类中的有参构造方法:
public class Student { public Student (){ this("java",18) ;//无参构造方法中调用有参构造方法 System.out.println("Im a student"); }; public Student(String name,int age){ System.out.println("My name is "+name+", Im "+age+" years old"); } /*输出结果: My name is java, Im 18 years old Im a student */ }创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!