JavaSE---类、对象、成员变量、局部变量
1、概述
1.1 类
1.1.1 类 是一种 自定义的 引用 数据类型;
1.2 对象
1.2.1 创建对象的根本途径:构造器; 通过new关键字 来调用 某个类的构造器;
package com.an.faceobject; public class Person { String name; Integer age; public Person(){ } public Person(String name,Integer age){ this.name=name; this.age=age; } Person p=new Person("jack",12); }
Person p=new Person("jack",12);
p存储在 栈内存中,存储着Person对象在内存存储的地址值;
Person对象存储在 堆内存中;
【注意】:多个引用变量 可以指向同一个对象;
package com.an.faceobject;
public class Person {
String name;
Integer age;
public Person(){
}
public Person(String name,Integer age){
this.name=name;
this.age=age;
}
Person p=new Person("jack",12);
//p1,p2均指向同一个Person对象
Person p1=p;
Person p2=p;
}
【注意】:当一个对象不被任何引用变量引用时,java的垃圾回收机制将会将其内存回收;
可以显式将Person p=null; Person p1=null; Person p1=null; 切断对象与引用变量的关系;
1.3 成员变量:
1.3.1 定义在 类 范围内的、无需显式初始化;
1.3.2 包括 类变量(static修饰) 、对象变量;
1.3.3 只要 类存在,程序就可以访问该类的变量(类.属性);
1.4 局部变量:
1.4.1 定义在 方法 内的、必须显式初始化;
1.4.2 只要对象 存在,程序就可以访问该对象的变量(对象.属性);
1.4.3 对象 也可以直接访问类属性(对象.类属性);
但是 一旦对类属性值进行修改,则类属性值将会改变,其他对象访问均是改变后的值;
package com.an.faceobject; public class Person { String name; Integer age; static String sex="man"; public Person(){ } public Person(String name,Integer age){ this.name=name; this.age=age; } public static void test(){ Person p=new Person("jack",12); p.sex="female"; } public static void main(String[] args){ System.out.println("pre:"+sex); test(); System.out.println("after:"+sex); } } 结果: pre:man after:female
1.4.4 局部变量根据定义形式的不同,分为:
a,方法形参:
方法声明时定义;
方法内有效;
无需显式初始化,在调用时由系统完成;
b,方法局部变量:
方法体内定义;
方法内有效;
必须显式初始化;
c,代码块局部变量:
代码块中定义;
代码块内有效;
1.4.5 java中允许成员变量与局部变量同名,但是局部变量值会覆盖掉成员变量值,如果要使用成员变量值,可以使用对象.属性(类.类属性) ;
package com.an.faceobject; public class Person { String name="jack"; public static void main(String[] args){ String name="rose"; System.out.println(name); System.out.println(new Person().name); } } 结果: rose jack
1.5 静态成员与非静态成员调用:
静态方法 中可以直接调用同类中静态成员;
静态方法 中如果想 调用非静态成员,需要创建对象,由对象调用;
非静态方法 中可以直接访问静态变量、非静态变量:
package com.an.faceobject; public class Person { String name; Integer age; static String sex="man"; public void test1(){ //普通方法中直接调用静态变量、非静态变量 sex=""; name=""; } public static void test(){ Person p=new Person(); //静态方法中可以由对象来调用非静态方法 p.test1(); } }