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.*;


相关文章
|
23天前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
217 0
|
29天前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
80 4
|
1月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
134 5
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
118 1
|
1月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
179 1
|
1月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
128 0
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
132 1
|
2月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
123 0
|
2月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
193 16