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


相关文章
|
17天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
17天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
26天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
44 8
|
24天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
27 2
|
26天前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
59 1
|
16天前
|
Java 数据库连接 编译器
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
34 0
|
29天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
12 0
|
1月前
|
Java Android开发
Eclipse 创建 Java 类
Eclipse 创建 Java 类
26 0
Java初级笔记-第五章
第五章 面向对象的特点 5.1 继承 面向对象的重要特点之一就是继承。类的继承使得能够在已有的类的基础上构造新的类,新类除了具有被继承类的属性和方法外,还可以根据需要添加新的属性和方法。
1052 0
|
Java Windows 开发框架
Java初级笔记-第一章
第一章 Java概览 1.1 基本简介 Java是一种理想的面向对象的网络编程语言。 1991年,出现了Oak语言,旨在解决编程语言的选择和跨平台的问题。
1376 0