Java学习笔记-3.类与对象

一、面向对象程序设计

1.概念:
   OOA:面向对象的分析,将现实世界进行抽象的分析

   OOD:面向对象的设计

   OOP:面向对象的程序

2.面向对象的特点:

  (1)封装性:一是把对象的全部状态和行为结合在一起,形成一个不可分割的整体,对象的私有属性只能由对象的行为来修改和读取

                      二是尽可能隐藏对象的内部细节,与外界的联系只能够通过外部接口来实现

  (2)继承性:特殊类的对象拥有其一般类的属性和行为

  (3)多态性:指同一个实体同时具有多种形式,体现在不同的对象可以根据相同的消息产生各自不同的动作

二、类

1.类的实现

[访问控制符] [修饰符] class 类名

{    //类体开始标志

    [类的成员变量说明]    //成员变量定义及初始化

    [类的构造方法定义]    //构造方法定义

    [类的成员方法定义]    //成员方法定义

}    //类体结束标志

2.成员变量

[访问控制符] [修饰符] 数据类型 成员变量名 [= 初始值];

   注:在没有赋值的情况下,Java将给其一个默认初值(final 变量除外)

3.成员方法

[访问控制符] [修饰符] 返回值类型 方法名([形式参数表])

{

    [变量声明]    //方法内用的变量,局部变量

    [程序代码]    //方法的主体代码

    [return [表达式]]    //返回语句

}

三、对象

1.对象的创建和使用

   对象创建格式: 类名称 对象名称 = new 类名称(参数值列表);

   也可以细分为: 类名称 对象名称 = null;    //在栈内存中声明

                         对象名称 = new 类名称(参数值列表);    //在堆空间声明

   对象引用属性和调用方法格式:对象名称.成员变量名;

                                             对象名称.成员方法名(实际参数表);

2.Java的内存机制:Java存在两种内存:栈内存、堆内存

   基本类型的变量和对象引用都是在栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当变量所在代码块运行结束,Java会自动释放掉为该变量分配的空间

   堆内存用来存放由new创建的对象,在堆中分配的内存,由Java虚拟机的自动垃圾回收器管理

   实质:在栈内存中创建对象引用,在堆内存中创建对象本身

   例:Person xiaoming2 = null;

         xiaoming2 = xiaoming;    //对象本身并没有复制,被复制的只是对象引用

3.与C++的区别:Object o2 = o1;

   在Java中只是把对象o1的引用复制给了o2,它们指向同一个对象,即只有一个对象

   在C++中将一个名为o1的对象的数据复制给o2,即存在两个对象,它们的值相同

四、方法

1.方法参数传递:Java只有一种参数传递方式,即按值传递

   如果实参是基本类型的数据,形参得到的是基本类型数据的一份拷贝

   如果实参是对象或者数组时,形参得到的是对象引用的拷贝,即实参和形参指向同一对象

2.方法的重载:在一个类中两个或更多的方法拥有相同的方法名,但是参数列表各不同

                     编译器会根据实参列表数中参数数目及类型来决定调用哪个方法

  注:返回值类型不能用于区分方法

        一般建议,同一组重载方法应当具有相似的功能,这样能增强程序的可读性,便于程序的维护

3.构造方法:在创建对象时被调用

   特征:具有与类相同的名称,方法声明中未定义返回值类型,没用return返回值

   如果没有在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方法

   注:构造方法也可以被重载

4.局部变量:Java中没有为局部变量提供默认值,作用域:声明开始到包含它的块尾

   在Java中,不能在嵌套的两个块中声明同名变量,但在互不嵌套的不同块中可以多次声明同名变量

五、关键字this

1.this:当前对象

   当方法内的局部变量和类的成员变量同名时,成员变量就会被隐藏,这时如果想在成员方法中使用成员变量,则必须使用关键字this

2.如果某个构造函数的第一条语句具有形式this(…),那么这个构造函数将调用本类的其他构造函数

   例:

   ThisDemo(String s) {

       System.out.println(“constructor s = ” + s);

   }

   ThisDemo(int i, String s) {

       this(s);

       this.i = i;

   }

   注:通过this调用构造函数,必须为当前构造函数的第一行,且构造方法只能调用一个构造函数

六、关键字static

1.关键字static可以用来修饰类的成员和成员方法。

   如果将关键字static放在一个成员变量声明前,该变量就成为静态变量,也成为类的成员变量

   如果将关键字static放在一个成员方法定义前,该变量就成为静态方法,也成为类的成员方法

2.静态变量(方法)可以直接通过类名访问(不提倡通过相应对象访问),且调用不需先实例化

3.静态方法没有相应的this引用

   静态方法中不能直接访问所属类的非静态变量和非静态方法

   非静态方法可以直接访问所属类的静态变量和静态方法

七、包

1.package的声明格式:package 包名;

   当包中还有子包时,可以使用“包1.包2…包n”进行指定

   包名可以理解为一个目录名

2.package的导入格式:import 包名.类名称

   注:此类必须声明成public

         引用一个包中的全部类:可用”*”表示,例:import test.demo.*

八、访问控制

1.类成员的访问控制符

控制等级 同一个类中 同一个包中 不同包中的子类 任意类
private      
default    
protected  
public

2.类的访问控制符

控制等级 同一个包中 不同包中
default  
public
原文地址:https://www.cnblogs.com/trj14/p/4287215.html