• java 学习笔记2 面向对象(上)


    类和对象

    类是某一批对象的抽象,可以把类理解成某种概念。对象是一个具体存在的实体。类和对象是面向对象的核心。

    类定义的是多个实例的特征,类不是具体存在,实例才是具体存在。

    定义类(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 void swap(int a , int b)
     4     {
     7         int tmp = a;
     8              a = b;
    10             b = tmp;
    12         System.out.println("swap方法里,a的值是"
    13             + a + ";b的值是" + b);}
    14    public static void main(String[] args)
    16     {
    17         int a = 6;
    18         int b = 9;
    19         swap(a , b);
    20         System.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            int tmp = dw.a;
    13             dw.a = dw.b;
    15             dw.b = tmp;
    17         System.out.println("swap方法里,a成员变量的值是"
    18             + dw.a + ";b成员变量的值是" + dw.b);
    19         // 把dw直接赋为null,让它不再指向任何有效地址。
    20         dw = null;
    21     }
    22     public static void main(String[] args)
    23     {
    24         DataWrap dw = new DataWrap();
    25         dw.a = 6;
    26         dw.b = 9;
    27         swap(dw);
    28         System.out.println("交换结束后,a成员变量的值是"
    29             + dw.a + ";b成员变量的值是" + dw.b);
    30     }

    成员变量和局部变量成员变量是在类里定义的变量,局部变量实在方法里定义的变量。

    只要类存在,程序可以访问该类的类变量 类.类变量

    只要实例存在,程序可以访问该实例的实例变量 实例.实例变量

    类变量也可以让该类的实例来访问    实例.类变量

    通过实例修改类变量的值,会导致该类的其他实例访问这个类变量时也获得被修改的值。

    java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,若需在方法里调用被覆盖的成员变量,则可使用this(实例变量)或类名(类变量)来调用。

    成员变量在内存中的运行机制

     

  • 相关阅读:
    mysql查找有某列但没有此列索引的表
    mysql找到所有索引
    mysq在某一刻同时获取主从库的位置点
    新书《深入应用C++11:代码优化与工程级应用》出版,感谢支持
    c++11实现一个简单的lexical_cast
    应该用bind+function取代虚函数吗?
    《深入应用C++11:代码优化与工程级应用》开始发售
    一个更好的C++序列化/反序列化库Kapok
    C++技术沙龙主要内容
    C++11模版元编程
  • 原文地址:https://www.cnblogs.com/sunshine88/p/6914819.html
Copyright © 2020-2023  润新知