读书笔记《算法》第四版__java基础(2)

本文讲述java的部分面向对象编程特性

抽象数据类型简介
API(方法)
对象
对象的使用
继承
输入与输出


抽象数据类型简介

数据类型指的是一组值和一组对这些值的操作的集合。我们已经接触过原始数据类型,在java中编程的基础主要是使用class为关键字构造的被称为 “引用类型” 的数据类型,这种编程风格叫做面向对象编程。

“引用类型”是一种“抽象数据类型(ADT)”, 是一种能够对使用者隐藏数据的数据类型。在使用抽象数据类型时,我们把注意力集中在API的描述上而不去关心数据的表示,在实现抽象数据类型时,我们把注意力集中在数据本身而不取关心API的实现


API(方法)
API要包括构造函数和实例方法

  • 各种方法的特点

构造函数:一种没有返回值的函数,可以理解为初始化方法,创建对象的标识
静态方法:主要作用是实现一个函数(不对对象属性修改)
实例方法:主要作用就是操作数据类型中的值(对对象属性进行修改)

公有方法:可以被对象调用
私有方法:不可以被对象调用

实例方法和静态方法不同之处:
如图所示
在这里插入图片描述

  • 构造函数的实现

  • 实例方法的实现

    扫描二维码关注公众号,回复: 8750898 查看本文章
  • 方法中变量的作用域


对象

  • 对象的三大重要特性

    • 标识:区别不同的对象,可以认为标识就是对象在内存中的位置
    • 状态:状态就是指数据结构中的值(python中称为"属性")
    • 行为:行为就是指对数据结构的操作 (python中称为"方法‘)
  • 创建对象

     Counter heads = new Counter("heads");  
    
    1. 为新对象分配内存空间
    2. 调用构造函数初始化对象中的值
    3. 返回该函数的一个引用

引用是一种访问对象的方式,可以认为引用就是内存地址


对象的使用

一. 直接调用方法

  • 通过语句

  • 通过表达式

  • 通过自动类型转换

二. 其他使用方式

  • 给对象赋值

在引用类型中,赋值语句将会创建出一个新的副本,不会创建新的对象的地址,而是指向另一个对象的地址(起别名)

  • 将对象作为参数

当我们在调用方法时把对象作为参数,相当于对象每个参数值都放进方法这种方式叫做 ------ 按值传递

  • 将对象作为返回值

直接举个例子:

public class FlipMax{
	public static Counter max(Counter x, Counter y){  // 返回对象的静态函数max()
		if (x.tally() > y.tally()) return x;
		else return y;
	}
	public static void main(String[] args){
		int T = Integer.parseInt(args[]);
		Counter heads = new Counter("heads");
		Counter tails = new Counter("tails");
		for (int i = 0; i < T; t++){
			if (StdRandom.bernoulli(0.5)) //正的概率为0.5 (掷硬币)
				heads.increment();
			else tails.increment();
		}
		if (heads.tally() == tails.tally()) StdOut.println("Tie");
		else StdOut.println(max(heads, tails) + " wins");
	}
}
  • 数组 ---- 也是一个对象

在java中,所有非原始数据类型都叫引用类型, 所有非原始数据类型的值都是对象
故所以,数组也是对象
tip:故所以在数组间使用赋值语句,是在创建数组地址的副本,而不是数组本身的副本(效果正合适)

对象数组:数组元素为对象的引用(对象的地址),而非对象本身

public class Rolls{
	public static void main(String[] args){
		int T = Integer.parseInt;
		int SIDES = 6;
		Counter[] rolls = new Counter[SIDES + 1];   // 声明并创建大小为7数组rolls[]
		for (int i = 1; i <= SIDES; i++)
			rolls[i] = new Counter(i + "s");
		for (int t = 0; t < T; t++){
			int result = StdRandom.uniform(1, SIDES+1);
			rolls[result].increment();
		}
		for (int i = 1; i <= SIDES; i++)
			StdOut.println(rolls[i]);
	}
}
  • 字符串 ---- 也是一个对象

在java中,所有非原始数据类型都叫引用类型, 所有非原始数据类型的值都是对象
故所以,字符串跟数组一样也是对象

字符串的API:如图所示
在这里插入图片描述


继承

  • 接口继承
  • 子类继承:
    一个类 (子类) 继承另一个类 (父类) 所有的实例方法和实例变量
    每个类都是java的object基类的子类,这就以为着每个类都含有某些自带的方法
    在这里插入图片描述

输入和输出

输入和输出建立起java程序与外界交流的模型

  • 重定向与管道
% java RandomSeq 1000 100.0 200.0 > data.txt  // 重定向 从输出到屏幕变为输出到txt文件
% java Average < data.txt  // 重定向 从键盘获取输入vi变为从txt文件中获取输入
% java java RandomSeq 1000 100.0 200.0 || Average // 管道 一个程序的输出重定向为一个程序的输入
  • 标准的输入和输出
  • 基于文件的输入和输出
  • 多输入与多输出(面向对象)

实例:

发布了11 篇原创文章 · 获赞 29 · 访问量 860

猜你喜欢

转载自blog.csdn.net/a13352912632/article/details/103956057
今日推荐