JAVA从入门到精通第5章
- 格式:pdf
- 大小:672.14 KB
- 文档页数:5
java 私塾第五章笔记整理数组是由相同类型的若干项数据组成的一个数据集合,也就是说数组是用来集合相同类型的对象并通过一个名称来引用这个对象。
可以声明任何类型的数组-----原始类型或类类型。
当数组声明的方括号在左边时,该方括号可以用于所有位于其右边的变量:char [] s,y。
数组一旦被创建,在内存里占用连续的内存地址。
数组的静态性:数组一旦被创建,就不能更改数组的长度。
Point [] p = new Point[3];new int[][4]是非法的。
数组的复制System.arraycopy(myArray,0,hold,0,myArray.length);数组排序Arrays.sort(a);定义一个一维的int数组,先创建它,并初始化它,给它赋值,然后输出其中的一个值CODE:public class Arr{public static void main(String args[]){int a[] = new int[5];a[0]=1;a[1]=2;System.out.println(a[0]);}}[Copy to clipboard]定义一个一维的A类型数组,直接定义并赋值,然后输出其中的一个值CODE:public class A{public static int i;public static void main(String args[]){A aa = new A();A bb = new A();A a[] = {aa,bb};a[0].i=2;System.out.println(a[0]);}}[Copy to clipboard]把上面的数组改成2维的数组CODE:public class A{public static int i;public static void main(String args[]){A a[][] = new A[5][5];a[0][0].i=2;System.out.println(a[0][0]);}}[Copy to clipboard]举例说明数组拷贝方法的使用:arraycopy方法,CODE:public class A{public static void main(String args[]){int a[] = new int[5];int b[] = new int[5];System.arraycopy(a[5],0,b[5],0,a.length);System.out.println(b[0]);}}[Copy to clipboard]常见的排序算法CODE:public class SortAll {public static void main(String[] args) {int[] i = { 1, 5, 6, 12, 4, 9, 3, 23, 39, 403, 596, 87 };System.out.println("----冒泡排序的结果:");maoPao(i);System.out.println();System.out.println("----选择排序的结果:");xuanZe(i);System.out.println();System.out.println("----插入排序的结果:");chaRu(i);}// 冒泡排序public static void maoPao(int[] x) {for (int i = 0; i < x.length; i++) {for (int j = i + 1; j < x.length; j++) {if (x[i] > x[j]) {int temp = x[i];x[i] = x[j];x[j] = temp;}}}for (int i : x) {System.out.print(i + " ");}}// 选择排序public static void xuanZe(int[] x) {for (int i = 0; i < x.length; i++) {int lowerIndex = i;// 找出最小的一个索引for (int j = i + 1; j < x.length; j++) {if (x[j] < x[lowerIndex]) {lowerIndex = j;}}// 交换int temp = x[i];x[i] = x[lowerIndex];x[lowerIndex] = temp;}for (int i : x) {System.out.print(i + " ");}}// 插入排序public static void chaRu(int[] x) {for (int i = 1; i < x.length; i++) {// i从一开始,因为第一个数已经是排好序的啦for (int j = i; j > 0; j--) {if (x[j] < x[j - 1]) {int temp = x[j];x[j] = x[j - 1];x[j - 1] = temp;}}}for (int i : x) {System.out.print(i + " ");}}}[Copy to clipboard]二分法查找CODE:package com.sghlwxf.binarySoft;public class TestBinarySoft{public static void main(String args[]){int[] array= new int[]{4, 12, 23, 33, 45, 53, 65, 78, 88, 90 };//定义要查找的数int seek = 76;//定义下标int index = 0;//定义起始位置int start = 0;//定义结束位置int end = 0;//定义计数器while(true){count ++;//int index = (start + end)/2;//为了防止start+end溢出,所以写成start+((end - start)/2)int index = start + ((end - start)/2);if(array[index] <seek){start = index;}else if(array[index]>seek){end = index;}else{break;}}System.out.pritln("所运行的次数是"+count+"地址为"+index);}}[Copy to clipboard]【此处有二叉树图片,可以到java 私塾官网下载完整笔记:】CODE:/** 二叉树节点*/public class BTNode {private char key;private BTNode left, right;public BTNode(char key) {this(key, null, null);}public BTNode(char key, BTNode left, BTNode right) {this.key = key;this.left = left;this.right = right;}public char getKey() {return key;}public void setKey(char key) {this.key = key;}public BTNode getLeft() {return left;}public void setLeft(BTNode left) {this.left = left;}public BTNode getRight() {return right;}public void setRight(BTNode right) {this.right = right;}}[Copy to clipboard]CODE:/** 二叉树遍历*/public class BinTree {protected BTNode root;public BinTree(BTNode root) {this.root = root;}public BTNode getRoot() {return root;}/** 构造树*/public static BTNode init() {BTNode a = new BTNode('A');BTNode b = new BTNode('B', null, a);BTNode c = new BTNode('C');BTNode d = new BTNode('D', b, c);BTNode e = new BTNode('E');BTNode f = new BTNode('F', e, null);BTNode g = new BTNode('G', null, f);BTNode h = new BTNode('H', d, g);return h;// root}/** 访问节点*/public static void visit(BTNode p) {System.out.print(p.getKey() + " ");}/** 递归实现前序遍历*/protected static void preorder(BTNode p) {if (p != null) {visit(p);preorder(p.getLeft());preorder(p.getRight());}}/** 递归实现中序遍历*/protected static void inorder(BTNode p) {if (p != null) {inorder(p.getLeft());visit(p);inorder(p.getRight());}}/** 递归实现后序遍历*/protected static void postorder(BTNode p) {if (p != null) {postorder(p.getLeft());postorder(p.getRight());visit(p);}}/** 非递归实现前序遍历*/protected static void iterativePreorder(BTNode p) {Stack<BTNode> stack = new Stack<BTNode>();if (p != null) {stack.push(p);while (!stack.empty()) {p = stack.pop();visit(p);if (p.getRight() != null)stack.push(p.getRight());if (p.getLeft() != null)stack.push(p.getLeft());}}}/** 非递归实现后序遍历*/protected static void iterativePostorder(BTNode p) {BTNode q = p;Stack<BTNode> stack = new Stack<BTNode>();while (p != null) {// 左子树入栈for (; p.getLeft() != null; p = p.getLeft())stack.push(p);// 当前节点无右子或右子已经输出while (p != null && (p.getRight() == null || p.getRight() == q)) {visit(p);q = p;// 记录上一个已输出节点if (stack.empty())return;p = stack.pop();}// 处理右子stack.push(p);p = p.getRight();}}/** 非递归实现中序遍历*/protected static void iterativeInorder(BTNode p) {Stack<BTNode> stack = new Stack<BTNode>();while (p != null) {while (p != null) {if (p.getRight() != null)stack.push(p.getRight());// 当前节点右子入栈stack.push(p);// 当前节点入栈p = p.getLeft();}p = stack.pop();while (!stack.empty() && p.getRight() == null) {visit(p);p = stack.pop();}visit(p);if (!stack.empty())p = stack.pop();elsep = null;}}public static void main(String[] args) {BinTree tree = new BinTree(init());System.out.print(" Pre-Order:");preorder(tree.getRoot());System.out.println();System.out.print(" In-Order:");inorder(tree.getRoot());System.out.println();System.out.print("Post-Order:");postorder(tree.getRoot());System.out.println();System.out.print(" Pre-Order:");iterativePreorder(tree.getRoot());System.out.println();System.out.print(" In-Order:");iterativeInorder(tree.getRoot());System.out.println();System.out.print("Post-Order:");iterativePostorder(tree.getRoot());System.out.println();}}[Copy to clipboard]输出结果Pre-Order:H D B A C G F EIn-Order:B A D C H G E FPost-Order:A B C D E F G HPre-Order:H D B A C G F EIn-Order:B A D C H G E FPost-Order:A B C D E F G H。
y 76 y第5章 类和对象y 77y5.1 类类实际上是定义一个模板,而对象是由这个模板产生的一个实例。
实际上前面的程序中也是在类中实现的,不过全在类中的main 方法中演示程序的使用,没有体现面向对象编程的思想。
这一节里主要讲解Java 类的相关知识,包括类的形式、类包含的内容属性和方法。
5.1.1 类的一般形式Java 的重要思想是万物皆对象,也就是说在Java 中把所有现实中的一切人和物都看做对象,而类就是它们的一般形式。
程序编写就是抽象出这些事物的共同点,用程序语言的形式表达出来。
例如,可以把某某人看做一个对象,那么就可以把人作为一个类抽象出来,这个人就可以作为人这个类的一个对象。
类的一般形式如下。
class 类名{类型 实例变量名;类型 实例变量名;……类型 方法名(参数){//方法内容}……}人的一般属性包括姓名、性别、年龄、住址等,他的行为可以有工作、吃饭等内容。
这样人这个类就可以有如下定义。
class Human{//声明各类变量来描述类的属性String name;String sex;int age;String addr;void work(){Java从入门到精通protected:本类、子类、同一包的类可见。
默认(无修饰符):本类、同一包的类可见。
public:对任何类可见。
类的一些描述性的属性,如人这个类中的姓名、性别、年龄、住址这些内容,可以看做类的字段。
本书对他们使用的称谓是实例变量,人这个类定义了以下4个实例变量: String name;String sex;int age;String addr;当然,为了说明类的最简单形式,并没有对这些变量加上修饰符,这样的效果是使用默认修饰符。
可以用以下形式声明这些变量。
public String name;public String sex;public int age;public String addr;实际上在类中的实例变量最好被声明为private,这更符合面向对象的封装性原则,这是后面的内容,暂且先不考虑,只讲如何使用它们而暂且不涉及使用的合理性。
JAVA入门教程:第五章数组 是 有 序 数 据 的 集 合 ,数组 中 的 每个 元 素 具 有 相 同 的 数 据 类 型 ,可 以 用 一 个统 一 的数组 名 和 下 标来 唯 一 地 确 定 数组 中 的 元 素 。
数组 有 一 维数组 和 多 维数组,下 面 我 们 分 别 介绍 。
§5.1 一 维数组一 、 一 维数组 的 定 义一 维数组 的 一 、 一 维数组 的 定 义一 维数组 的 定 义 方 式 为:type arrayName[];其 中 类 型 (type)可 以 为Java中 任 意 的 数 据 类 型 ,包 括 简单类 型 和 组 合 类 型 (见2.1),数组 名arrayName为 一 个 合 法 的 标识 符 ,[]指 明 该变 量 是 一 个数组类 型 变 量 。
例 如 :int intArray[];声 明 了 一 个 整 型 数组,数组 中 的 每个 元 素 为 整 型 数 据 。
与C 、 C++不 同 ,Java在 数组 的 定义 中 并 不 为数组 元 素 分 配 内 存 ,因 此 []中 不 用 指 出 数组 中 元 素 的 个数,即 数组长 度 ,而 且 对 于如 上 定 义 的 一 个数组 是 不 能 访问它 的 任 何 元 素 的 。
我 们 必 须为它 分 配 内 存 空 间,这时 要 用到 运 算 符 new,其 格 式 如 下 :arrayName = new type[arraySize];其 中 ,arraySize指 明 数组 的 长 度 。
如 :intArray = new int[3];为 一 个 整 型 数组 分 配 3个int型 整 数 所 占 据 的 内 存 空 间 。
通 常 ,这两 部 分 可 以 合 在 一 起 ,格 式 如 下 :type arrayName = new type [arraySize];例 如 :int intArray = new int[3];二 、 一 维数组 元 素 的 引 用定 义 了 一 个数组,并 用 运 算 符 new为它 分 配 了 内 存 空 间 后 ,就 可 以 引 用 数组 中 的 每 一 个元 素 了 。
java习题及答案第5章习题参考答案第5章习题解答1.使⽤抽象和封装有哪些好处?答:抽象是⼈们解决问题的基本⼿段,程序设计过程中需要对问题领域进⾏分析、设计中得出的抽象概念,然后封装成⼀些类。
封装也称为信息隐藏,是指利⽤抽象数据类型将数据和基于数据的操作封装在⼀起,使其构成⼀个不可分割的独⽴实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留⼀些对外接⼝使之与外部发⽣联系。
系统的其他部分只有通过包裹在数据外⾯的被授权的操作来与这个抽象数据类型交流与交互。
也就是说,⽤户⽆需知道对象内部⽅法的实现细节,但可以根据对象提供的外部接⼝(对象名和参数)访问该对象。
把对象中相同或相似地地⽅抽象出来,从特殊到⼀半,从具体到抽象的过程,对象经过抽象得到类,类的实例化成了对象。
也可以⾼度抽象成接⼝,让不完全相同,但包含相同点的对象实现此接⼝,也就是利⽤多态实现。
把相同点抽象出来,抽象成此类或接⼝的⽅法、属性、字段等,封装就是隐藏某个对象的与其基本特性没有很⼤关系的所有详细信息的过程,就是将需要让其他类知道的暴露出来,不需要让其他类了解的全部隐藏起来,封装可以阻⽌对不需要信息的访问,我们可以使⽤访问指定符实现封装,也可以使⽤⽅法实现封装,可以将隐藏的信息作为参数或者属性值、字段指传给公共的接⼝或⽅法,以实现隐藏起来的信息和公开信息的交互。
封装的⽬的就是为了实现“⾼内聚,低耦合”。
⾼内聚就是类的内部数据操作细节⾃⼰完成,不允许外部⼲涉,就是这个类只完成⾃⼰的功能,不需要外部参与;低耦合,就是仅暴露很少的⽅法给外部使⽤。
2.构造⽅法的作⽤是什么?它与⼀般的成员⽅法在使⽤和定义⽅⾯有什么区别?答:构造⽅法⽤于⽣成⼀个对象实例,并对对象实例中的成员变量初始化。
当⽤new创建⼀个类的新的对象时,构造⽅法⽴即执⾏。
构造⽅法名字必须与类名相同。
3.Overload和Override的区别?答:⽅法重载(overloading)与⽅法覆盖(overriding)是实现多态性的基本⼿段,但两者的机制不同。
程序、进程和线程●程序是计算机指令的集合,它以文件的形式存储在磁盘上。
●进程:是一个程序在其自身的地址空间中的一次执行活动。
●进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源。
●线程:是进程中的一个单一的连续控制流程。
一个进程可以拥有多个线程。
●线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。
Java对多线程的支持●Java在语言级提供了对多线程程序设计的支持。
●实现多线程程序的两种方式:(1)从Thread类继承;(2)实现Runnable接口。
class MutiThread{public static void main(String[] args){MyThread mt=new MyThread();mt.start(); //启动run()方法System.out.println("main: "+Thread.currentThread().getName());}}class MyThread extends Thread{public void run() //启动线程的入口方法{System.out.println(getName());}}运行结果为: main: main(其中的main为运行main()方法的线程名称.)Thread-0 (MyThread类中当前运行的线程名称.) 为何先打印出的是main()方法所在的线程的名字呢?这是因为线程在运行的时候操作系统会给它分配时间片,当调用start()方法的时候,main()方法所在的时间片还没有到期,所以它继续往下运行,打印出它所在的线程的名字。
接下来main()方法所在的时间片到期了,轮到mt所代表的线程运行,然后java虚拟机调用run()方法,打印出对应的线程的名字即Thread-0。
Java程序设计各章知识要点第1章 Java概述〃Java是当今最流行的软件开发语言之一。
〃Java由Sun公司开发。
Sun公司提供Java 2平台标准版,称为Java 2软件开发工具箱(J2SDK),其中包括一些利用Java编写软件所需要的最少工具。
〃Java是一种能够很好地支持软件工程技术的完全面向对象的语言。
〃Java已成为开发基于Internet的应用程序(以及其他方面的运用)的选用语言。
〃对象是以真实世界的事物为模型的可复用软件组件。
模块化的面向对象设计和实现方法使软件开发的效率比使用原来流行的程序设计技术(如结构化编程)更高。
面向程序通常更易干理解、修正和更改。
〃Java始于Sun公司的一个智能电子产品项目。
〃当WWW在1993年广泛流行时,Sun公司立即发现了使用Java创建动态网页的潜力。
〃Java现在多用于创建动态和交互性的网页、开发大规模企业应用程序、增强WWW服务器的功能、提供支持用户设备的应用程序等。
〃Java程序包括类,而类包括执行任务并在完成任务后返回信息的方法。
〃大多数Java程序员可以使用Java类库中丰富的类。
务的程序。
〃用大多数高级语言,包括C和C++,编写的程序在同一时间只执行一个动作。
而Java通过称为多线程的技术,使得程序设计人员能够编写并行处理程序。
〃Internet是30多年前在国防部的资助下开发的。
最初设计用来连接十几个大学和科研机构的主要计算机系统。
今天的Internet可以被世界范围的计算机访问。
〃WWW允许计算机用户查看Internet上的多媒体文档。
〃Java系统通常包括几个部分:编程环境、语言、Java应用程序编程接口(API)和各种类库。
〃Java程序通常经历5个步骤才运行:编辑、编译、载人、检验和执行。
〃Java程序文件以.java为扩展名。
〃Java编译器(javac)将Java程序翻译成二进制字节码—Java解释器所能理解的语言。