ges abs nal mage 有效 面向对象 ima col
类和对象
类是某一批对象的抽象,可以把类理解成某种概念。对象是一个具体存在的实体。类和对象是面向对象的核心。
类定义的是多个实例的特征,类不是具体存在,实例才是具体存在。
定义类 (class) 的语法:
[修饰符] class 类名
{ 零个到多个构造器定义....
零个到多个成员变量....
零个到多个方法....}
要点:1. 三种常见的成员:构造器(new 关键字调用) 成员变量 方法
2. 类名由一个或多个有意义的词连接而成,每个单词首字母大写,其余小写。
3. 修饰符可以是 public final abstract 或省略
定义成员变量 (field) 的语法:
[修饰符] 类型 成员变量名 [= 默认值];
要点:1. 成员变量名第一个单词首字母小写,后面每个单词首字母大写,其余小写。
2. 类型可以是基本类型,也可以是引用类型。
定义方法的语法
[修饰符] 方法返回值类型 方法名(形参列表)
{方法体}
要点:方法名和成员变量的规则相同,通常选英语动词。
static 是一个特殊的关键字,可修饰方法成员变量等成员。static 修饰的成员属于类本身而不属于该类的单个实例,也叫类变量和实例变量(静态变量和非静态变量)。静态成员不能访问非静态成员。
构造器是一种特殊的方法。
[修饰符] 构造器名(形参列表)
{方法体}
要点:构造器名必须与类名相同
类的作用:定义变量 创建对象 调用类方法或访问类变量
对象的产生和使用
创建对象的根本途径是构造器,通过 new 关键字来调用某个类的构造器即可创建这个类的实例。
例:Persn p=new Person();// 定义 p 变量的同时为 p 变量赋值
类或实例访问方法和成员变量的语法:类. 类变量 | 方法 实例. 实例变量 | 方法
static 修饰的成员变量,可通过类和实例调用。没有 static 修饰的方法和成员变量,只能通过实例来调用。
Person p=new Person(); 这段代码创建了 Person 对象,对象赋值给 p 变量。
person 对象赋给一个引用变量的示意图
person 类型的变量实际是一个引用,被存放在栈内存里。指向实际的 person 对象
真正的 person 对象存放在堆内存中
java 程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象,当访问 p 引用变量的成员变量和方法时,实际是访问 p 所引用对象的成员变量和方法。
对象的 this 引用
this 关键字的最大作用,就是让类中的一个方法,访问该类里的另一个方法或实例变量。
this 关键字总是指向调用该方法的对象。
大部分时候,一个方法访问该类中定义的其他方法,成员变量时加不加 this 前缀效果完全一样。
方法方法不能独立定义,方法必须属于类或对象。
同一个类里的一个方法调用另一个方法时,如被调方法是普通方法,默认使用 this 作为被调者,如被调方法是静态,默认使用类作为调用者。
java 里方法的参数传递只有一种:值传递 将实际参数的副本传入方法内而参数本身不受影响。
参数副本分为基本类型的参数和引用类型(地址)的参数
- 1 public class PrimitiveTransferTest
- 2 {
- 3 public static voidswap(inta ,int b)
- 4 {
- 7 inttmp = a;
- 8a = b;
- 10b = tmp;
- 12System.out.println("swap方法里,a的值是"13+ a + ";b的值是" + b);}
- 14 public static void main(String[] args)
- 16 {
- 17 inta = 6;
- 18 intb = 9;
- 19 swap(a , b);
- 20System.out.println("交换结束后,变量a的值是"21+ a + ";变量b的值是" + b); }
- 1 class DataWrap
- 2 {
- 3 int a;
- 4 int b;
- 5 }
- 6 public class ReferenceTransferTest
- 7 {
- 8 public static void swap(DataWrap dw)
- 9 {
- 10 // 下面三行代码实现dw的a、b两个成员变量的值交换。
- 11 inttmp = dw.a;
- 13dw.a = dw.b;
- 15dw.b = tmp;
- 17System.out.println("swap方法里,a成员变量的值是"18+ dw.a + ";b成员变量的值是" + dw.b);
- 19 // 把dw直接赋为null,让它不再指向任何有效地址。
- 20dw =null;
- 21 }
- 22 public static void main(String[] args)
- 23 {
- 24DataWrap dw =new DataWrap();
- 25dw.a = 6;
- 26dw.b = 9;
- 27 swap(dw);
- 28System.out.println("交换结束后,a成员变量的值是"29+ dw.a + ";b成员变量的值是" + dw.b);
- 30}
成员变量和局部变量成员变量是在类里定义的变量,局部变量实在方法里定义的变量。
只要类存在,程序可以访问该类的类变量 类. 类变量
只要实例存在,程序可以访问该实例的实例变量 实例. 实例变量
类变量也可以让该类的实例来访问 实例. 类变量
通过实例修改类变量的值,会导致该类的其他实例访问这个类变量时也获得被修改的值。
java 允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,若需在方法里调用被覆盖的成员变量,则可使用 this(实例变量)或类名(类变量)来调用。
成员变量在内存中的运行机制
java 学习笔记 2 面向对象(上)
来源: http://www.bubuko.com/infodetail-2091833.html