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


相关文章
|
13天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
36 17
|
5天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
9天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
44 4
|
9天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
22 2
|
12天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
12天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
12天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
|
2月前
|
存储 Java
Java编程中的对象和类
【8月更文挑战第55天】在Java的世界中,“对象”与“类”是构建一切的基础。就像乐高积木一样,类定义了形状和结构,而对象则是根据这些设计拼装出来的具体作品。本篇文章将通过一个简单的例子,展示如何从零开始创建一个类,并利用它来制作我们的第一个Java对象。准备好让你的编程之旅起飞了吗?让我们一起来探索这个神奇的过程!
30 10
|
2月前
|
存储 Java
Java的对象和类的相同之处和不同之处
在 Java 中,对象和类是面向对象编程的核心。
|
2月前
|
Java
Java 对象和类
在Java中,**类**(Class)和**对象**(Object)是面向对象编程的基础。类是创建对象的模板,定义了属性和方法;对象是类的实例,通过`new`关键字创建,具有类定义的属性和行为。例如,`Animal`类定义了`name`和`age`属性及`eat()`、`sleep()`方法;通过`new Animal()`创建的`myAnimal`对象即可调用这些方法。面向对象编程通过类和对象模拟现实世界的实体及其关系,实现问题的结构化解决。