Java 程序设计 第3章 类与对象 笔记

简介: Java 程序设计 第3章 类与对象 笔记

3.1 面向对象程序设计概述

3.1.1 面向对象的基本思想

面向对象(Object Oriented,OO)的基本思想是按照人类习惯,把实体抽象成对象,每个对象封装了数据及对数据的操作

3.1.2 类和对象

举例:类:汽车(这个概念) ;

         对象:一辆真实具体的汽车。

类可以看成是对象的抽象,描述具有一组具有相同特征的对象。

对象中的两个东西:数据 和 操作 在Java中通过 成员变量 和 成员方法 来表示 数据 和 操作

3.1.3 Java的面向对象技术

Java是一种完全面向对象的程序设计语言。

3.2 类的创建

3.2.1 类的定义

类的定义包含两部分:成员变量和成员方法。 Java中类定义的格式为:

类的修饰符 class 类名  [extendx 父类名] { //类头

成员变量的定义;                                        //类体

成员方法的定义;

}

类修饰符用于说明类的访问性(如public)和其他性质(如final,abstract等)

一个Java源文件最多能有一个public类,且源文件名必须和public类名相同。

extends 表示该类是从父类派生出来的。

3.2.2 成员变量

也称数据成员,用于描述类的属性,定义格式如下:

成员变量修饰符  数据类型  成员变量名;

(修饰符表示可访问性和性质)

3.2.3 成员方法

方法的作用:1.对成员变量进行各种操作;2.与其他类对象进行交流时,作为类和外部交互的接口,所以成员方法大多是公有的。定义格式:

成员方法修饰符  返回值类型  方法名(参数表) {

};

类定义示例:

一个圆,本身没有什么特别的,可以用来熟悉一下类的写法。

 
public class Circle {
  private double x;
  private double y;
  private double radius;
  public double getX() {
    return x;
  }
  public void setX(double x1) {
     x = x1;
  }
  public double getY() {
    return y;
  }
  public void setY(double y1) {
    y = y1;
  }
  public double getRadius() {
    return radius;
  }
  public void setRadius(double r) {
    if(r>=0)
      radius = r;
    else
      radius = 0;
  }
  public double getPerimeter() {
    return 2*3.14*radius;
  }
  public double getArea() {
    return 3.14*radius*radius;
  }
  public String toString() {
    return "Circle:Center=["+getX()+","+getY()+"];Raduys="
        +getRadius(); 
  }
}

3.3 对象的创建和使用

3.3.1 创建对象

类是一种数据类型,是对事物的抽象。 在程序中不能直接使用类,(就像你不能开一辆概念上的车子)

必须通过创建类的实例(即对象)来使用它。

创建对象的形式:

形式1:先声明对象的引用

  类目 引用变量名;

如:Circle circle1;

然后实例化:

 引用变量名 = new 类名();

如:circle1 = new Circle();

 

形式2.:将1的声明和实例化合在一起:Circle circle1 = new Circle();

3.3.2 构造方法与对象初始化

在Java中,使用构造方法(constructor)是生成实例对象的唯一方法。

构造方法时一种特殊的方法,通过new运算符调用,用来创建对象。

1.构造方法的创建

和创建其他成员方法相同,只是方法名和类名相同,且没有返回值(不要填void,返回值类型直接省略)

构造方法可以重载。

构造方法示例:

public class Xyz{
  private int x;
  public Xyz(){
   x = 0;
  }
  public Xyz(int i){
  x = i;
 }
}

2. 构造方法的调用

上面已经说过,用new调用,用于生成对象。

3.默认的构造方法

如果没有定义构造方法,系统会自动生成一个默认构造方法。

如果定义了构造方法,则不会自动生成默认构造方法。

一般情况下,我们都是自己定义构造方法的。

4.构造方法的重载(this)

有些构造方法可能会调用另一个构造方法,可以通过this来调用那个方法。

例如:

  public Circle(double x1,double y1,double r1) {
    x = x1;
    y = y1;
    radius = r1;
  }
  public Circle() {
    this(0,0,0);  //使用this,调用另一个构造函数
  }

3.3.3 对象的使用

使用对象的数据和方法:

对象引用.数据;

对象引用.方法(参数表);

 

public class CircleTest{
  public static void main(String[] args) {
    Circle c1 = new Circle();
    Circle c2 = new Circle(1.1,1.1,2);
    Circle c3 = new Circle(c2);
    
    System.out.println(c1.toString()+";周长="+c1.getPerimeter()
    +"面积="+c1.getArea() );
    System.out.println(c2.toString()+";周长="+c2.getPerimeter()
    +"面积="+c2.getArea() );
    System.out.println(c3.toString()+";周长="+c3.getPerimeter()
    +"面积="+c3.getArea() );
  }
}

3.3.4 this关键字  指向自身的指针

3.3.5 finalize方法与对象的销毁

Java提供自动内存管理,自动释放不需要再使用的对象。

Java Object类 提供了protected void finalize()方法,这个方法释放对象所占内存。

3.4 类的封装

3.4.1 封装的目的(易用、安全)

类把数据和方法封装起来,使外界使用类时不需要考虑类中的具体细节。

 

数据成员变量一般用private限制,让数据只能在类的内部访问,外部不可访问。保证数据的安全性。

3.4.2 类的访问控制

在Java中,根据类的作用和相关性,对类进行分组,称为包。

同一个包里的类是可以相互访问的,不同包内的类能否相互访问由类的控制符决定。

类的控制符和可见性:

                          public          无修饰符(默认)

同一包:         可见              可见

不同包:         可见              不可见

可以看出,public的类在不同包 也 可见。

 

3.4.3 成员的控制访问


public protected 默认 private
同一包 同一个类 可见 可见 可见 可见

同一个包的子类
可见 可见 可见 不可见
  同一个包的非子类 可见 可见 可见 不可见
不同包 不同包的子类 可见 可见 不可见 不可见
  不同包的非子类 可见 不可见 不可见 不可见

竖着看,public修饰的成员 是公有的,任何对象都能访问。

protected修饰的成员是被保护的,只有同一包或者子类可见。

默认的是包作用域,同一个包可见。

private 是私有的,只有自己可见。

3.4.4 类成员(静态static成员)

类中的特殊成员,不依赖特定的对象

1.类变量

类变量的作用:能被该类的所有实例共享,实现实例对象之间数据共享和通信。

如果所有实例对象都有一个常量属性,可以把其定义为类变量,节省内存。

定义类变量声明:加变量前加static

如: private static int count = 0;

类变量的访问:

可以通过类名或对象访问:

类名.类变量

对象.类变量

2.类方法

与类变量类似,类方法时static修饰的成员方法。 访问方式也和类变量类似。

类方法需要注意:

1.因为类方法不依赖对象,所以不存在this

2.类方法中出现的成员变量只能是静态的。

3.静态方法不能被子类重写。

 

3.5 类的导入与包

包(package)是类和接口的集合。

包具有以下几个方面的作用:

(1)划分类名空间 避免名称冲突

(2)控制类之间的访问

(3)帮助划分类

 

3.5.2 package语句

建立一个包时要使用package语句,格式为:

package pkg1[.pkg2[.pkg3...]];

功能是创建一个具有指导名字的包,该Java文件中的类和接口都放在这个包中。

例如:

package dbconnect;

package cn.edu.njupt.ch03

包的命名使用小写字母,采用点分方法 . 表示目录的层级。 cn.edu.njupt.ch03 与 cn\edu\njupt\ch03对应

注意:

如果用package语句,package语句必须放在文件的第一条可执行语句。

一个文件最多有一个package语句

如果一个源文件没有package语句时,系统会创建一个无名包(缺省包)。

 

3.5.3 import(导入)语句

使用import语句,导入其他包提供的类,简化书写。

例如有一个包 cn.edu.njupt.ch03,里面有一个类MyClass

package cn.edu.njupt.ch03;

public class MyClass{

...

}

在没有import的时候,如果在其他包中的类要使用MyClass,可以 使用

cn.edu.njupt.ch03,MyClass my = new  cn.edu.njupt.ch03.MyClass();

使用import,可以简化书写:

import  cn.edu.njupt.ch03.MyClass;

MyClass my = new MyClass();

 

也可以使用*(替换具体的类MyClass)来包含包内的所有类

import  cn.edu.njupt.ch03.*;


相关文章
|
1天前
|
设计模式 Java 容器
在Java中调用一个接口的多个实现类
在Java中调用一个接口的多个实现类
11 4
|
23小时前
|
Java
杨老师课堂_Java教程第六篇之引用数据类型_类的运用
杨老师课堂_Java教程第六篇之引用数据类型_类的运用
5 1
|
2天前
|
Java 数据安全/隐私保护
Java基础之类封装、继承、多态
Java基础之类封装、继承、多态
8 2
|
2天前
|
安全 Java 数据安全/隐私保护
Java基础之类封装、继承、多态
Java基础的封装、继承和多态是OOP的核心。封装通过访问控制(如private)隐藏类的内部细节,提供公共接口供外部交互。例如,`Person`类封装`name`和`age`,通过`getName()`和`setAge()`方法访问。继承允许子类(如`Dog`)继承父类(如`Animal`)的属性和方法,并可扩展或覆盖。多态使得父类引用可指向子类对象,调用方法时根据实际对象类型执行,如不同动物的`makeSound()`。接口实现多态提供了一种定义行为而不必关心实现的方式。向上转型(子类→父类)安全且默认,而向下转型(父类→子类)需类型检查以避免异常。
6 1
|
2天前
|
存储 安全 Java
Java集合类是Java编程语言中用于存储和操作一组对象的工具
【6月更文挑战第19天】Java集合类,如`List`、`Set`、`Map`在`java.util`包中,提供高级数据结构。常用实现包括`ArrayList`(快速随机访问)、`LinkedList`(高效插入删除)、`HashSet`(无序不重复)、`TreeSet`(排序)、`HashMap`(键值对)和`TreeMap`(排序映射)。集合动态调整大小,支持对象引用,部分保证顺序。选择合适集合优化性能和数据组织。
8 1
Java初级笔记-第五章
第五章 面向对象的特点 5.1 继承 面向对象的重要特点之一就是继承。类的继承使得能够在已有的类的基础上构造新的类,新类除了具有被继承类的属性和方法外,还可以根据需要添加新的属性和方法。
1023 0
|
Java Windows 开发框架
Java初级笔记-第一章
第一章 Java概览 1.1 基本简介 Java是一种理想的面向对象的网络编程语言。 1991年,出现了Oak语言,旨在解决编程语言的选择和跨平台的问题。
1356 0
Java初级笔记-第二章
第二章 Java的基本数据类型、运算符及表达式 2.1 标识符 标识符是程序员对程序中的各个元素加以命名时使用的命名记号。
1184 0
|
存储 算法 Java
Java初级笔记-第三章
第三章 程序设计基础 3.1 流程图 3.1.1 什么是流程图: 流程图是通过箭头(流程线)相互连接的几何图形来表达程序运行的方法。
1398 0
Java初级笔记-第四章
第四章 类 4.1 类的概念 Java语言是一种纯面向对象的编程语言(OOP,你所有使用的内容,都是从类开始。
1247 0