Java开发前奏
1.计算机基础
1.1.计算机
电子计算机,俗称电脑,是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。
1.2.硬件和软件
1.2.1.硬件
1.CPU是一台计算机的运算核心和控制核心。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU由运算器、控制器、寄存器、高速缓存及实现它们之间联系的数据、控制及状态的总线构成。作为整个系统的核心,CPU 也是整个系统最高的执行单元,因此CPU已成为决定电脑性能的核心部件,很多用户都以它为标准来判断电脑的档次。CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed)。该时钟速度越快,时间段内执行的指令就越多, 目前酷睿是2G-3G(1G是10000Mhz)例如,2MHz(200万次/秒),3GHz(三十亿次/秒)。
2.内存是数据与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。
3. 存储设备:内存不能长久保存数据(非ROM),断电时信息就丢失,程序和数据都会被保存在存储设备中(例如硬盘),当程序和数据需要使用时,再加载进内存,注意:内存读取和写入的速度要比存储设备快的多。
存储设备主要有:磁盘驱动器,光盘驱动器(cd dvd)USB闪存(U盘)。
1.2.2.软件
软件的概述:按照一定顺序组织的计算机数据与指令的集合。
软件 = 数据+指令+文档
1.系统软件
例如:Widows xp Linux Unix
2.应用软件
例如:QQ、WPS、Photoshop、、微软的Office
软件开发:制作软件。
软件的本质 :提高人与计算机交流效率,方便人与机器交互。
1.3.人机交互的方式:
1.图形化界面:简单直观,容易操作,用户的体验好。
2.dos命令交互方式:需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记录住一些命令,而且只能完成一些比较单一的功能。
控制台打开的步骤:开始--所有程序---附件--命令行提示符
或者开始-输入cmd即可。
1.4.常见的dos命令
盘符:进入指定的盘符下。
dir: 列出当前目录下的文件以及文件夹
md : 创建目录
rd : 删除目录 注意:rd不能删除非空的文件夹,而且只能用于删除文件夹。
cd : 进入指定目录
cd.. : 退回到上一级目录
cd \ : 退回到根目录
echo "hello java">a.txt 写入文本到指定文件
type a.txt 显示文件内容命令
del : 删除文件 注意:不能删除文件夹,只能删除文件。
exit : 推出dos命令行
cls : 通知计算机将当前的命令清空
*: 是通配符。
方向键上下是找回上次你写过的命令。
1.5 Java虚拟机(JVM)
Java Virtual Machine 一个软件模拟的计算机。Java源程序想象成我们的C源程序,Java源程序编译后生成的字节码(.class)就相当于C源程序编译后的二进制可执行文件。JVM虚拟机相当于计算机系统(操作系统+硬件环境),Java解释器相当于CPU。
.exe文件直接在windows操作系统下运行,在CPU上运行的是机器码(.exe文件)
.class字节码文件是运行在JVM虚拟机下的,在Java解释器上运行的是Java字节码。
Java解释器相当于运行Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。Java解释器实际上就是特定的平台下的一个应用程序。只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运行,这是Java跨平台的根本。当前,并不是在所有的平台 下都有相应Java解释器程序,这也是Java并不能在所有的平台下都能运行的原因,它只能在已实现了Java解释器程序的平台下运行。
Java 变量与关键字
文档注释:
1.需要使用sum给我们提供的javadoc工具生成一个html的说明文档。
2.只能抽取public的属性或者方法内容。
格式:javadoc –d 指定存储文档的路径 -version –author(可选) 目标文件
@author 作者
@version 版本
@param 方法的参数
@return 返回值
流程控制语句
函数与数组
1.数组
注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小,我们可以使用length属性获取数组的大小。
数组常见的异常:1.数组角标越界异常。2.空指针异常。
数组的内存分析:
栈内存特点:存储的局部变量。处理方式:变量使用完离开自己的空间就马上释放。
堆内存特点:存储的数组和对象,凡是new关键字创建的实体都是保存在堆内存里面的。1.每一个对象都有一个内存首地址。2.对象都有默认的初始值。
2.二维数组
前提:
toString()方法:将数组的元素以字符串的形式返回
sort()方法:将数组按照升序排序
binarySearch():在指定数组中查找指定元素,返回元素的索引。如果没有找到,返回(-插入点-1) 注意:使用查找功能的时候,数组一定要先排序。
面向对象
1.匿名对象:表示没有名字的实体,即该实体没有对应的变量名进行引用。
用途:对象对方法进行一次调用的时候,可以使用匿名对象对代码进行简化。同时匿名对象可以对实际参数进行传递。
使用:当只使用一次的时候可以使用匿名对象,执行完毕之后,对象就变成了垃圾。执行方法时,可以将匿名对象作为实际参数传递进去。
总结:
1.匿名对象设置的属性永远无法获取,因为没有引用变量指向那个对象。
2.任何两个匿名对象使用==比较,永远返回false。
3.匿名对象主要用于实参。
2.构造方法
作用:对对象进行初始化。
3.this关键字
this关键字表示对对象的引用,表示this在指向一个对象时,所指向的对象就是调用该函数的对象引用。
this关键字表示所在函数所属对象的引用。
字符串和文本I/O
1.字符串的比较
警告:如果使用像> >= < <=这样的比较运算符比较两个字符串,就会发生语法错误。替代的方法是:s1.compareTo(s2)来进行比较。
注意:如果两个字符串相等,equals方法返回true;如果它们不等,方法返回false。compareTo()方法会根据一个字符串是否等于、大于或小于另一个字符串而返回0、正整数或负整数。
警告:length()方法是String的一个方法,但它是数组对象的一个属性,所以要获取字符串s中的字符个数,必须使用 s.length() 而要获取数组a中的元素个数,必须使用s.length
2.文件类File
File类特意提供了一种抽象,这种抽象表示以不依赖机器的方式处理很多文件和路径名依赖机器的复杂问题。
注意:在windows中目录的分隔符是(\),但是在Java中,反斜杠是一个特殊的字符,需要转义写成(\\)。
注意:构建一个File实例并不会在机器上创建一个文件。不管文件是否存在,都可以创建任意文件名的File实例。我们可以调用File实例上的exists()方法判断文件是否存在。
3.文件的输入输出
File对象封装了文件或路径的属性,但是这一File对象不包括创建文件以及向/从文件读/写数据的方法。为了完成I/O操作,我们需要使用恰当的Java I/O类创建对象。
1.PrintWriter 写数据
该类可以用来创建一个文件,并向文本文件中写入数据。
注意:如果文件不存在,那么会调用PrintWriter的构造方法创建一个新的文件。如果文件已经存在,那么文件当前内容会被抛弃。
2.使用Scanner读取数据
java.util.Scanner类用来从控制台读取字符串和基本类型数值。为了能够从键盘读取,需要为System.in创建一个Scanner。
注意:new Scanner(String) 为给定的字符串创建一个Scanner。为创建Scanner从文件中读取数据,需要使用构造方法 new File(filename) 利用 java.io.File 类创建File类的一个实例。
总结:
1.字符串是封装在String类中的对象,要创建一个字符串,可以使用11种构造方法之一,也可以使用字符串直接量进行简洁初始化。
2.String 对象是不可变的,它的内容不能改变。
3.可以调用字符串的length()方法获取它的长度,使用charAt(index)方法从字符串中提取特定下标位置的字符,使用indexOf()方法和lastIndexOf()方法找出一个字符串中的某个字符或者某个子串。
4.substring()方法从字符串中提取子串
5.
多维数组
注意:使用语法 new int[5][]创建数组时,必须指定第一个下标。语法:new int[][]是错误的。
异常处理 更多知识
1.声明异常:
注意:如果方法没有在父类中声明异常,那么就不能在子类中对其进行覆盖来声明异常。
2.抛出异常:
注意:通常JAVA API 中的每个异常类至少有两个构造方法:1.无参构造方法。 2.一个带可描述此异常的String参数的构造方法。(该参数称为异常消息,可以使用getMessage()获取)
注意:声明异常的关键字:throws 抛出异常的关键字:throw。
3.捕获异常
注意:
1.从一个通用父类可以派生出各种异常类,如果一个catch块可以捕获一个父类的异常对象,那么它就能够父类的所有子类的异常对象。
2.在catch块中异常被指定的顺序非常重要,如果父类的catch块出现在子类的catch块之前,就会导致编译错误。
3.Java强迫程序员必须处理必检异常,如果方法中声明了一个必须检验的异常(error或runtimeException),就必须在try-catch块中调用它,或者在调用方法中声明要抛出异常。
4.使用异常的时机
注意:异常处理过程中通常需要更多的时间和资源。
1.异常出现在方法中,如果想让该方法的调用者处理异常,应该创建一个异常对象并将其抛出。如果能在发生异常的方法中处理异常,那么就不需要抛出异常或使用异常。
注意:不要将异常处理用作简单的逻辑测试。而在哪种情况下使用异常需要我们自己判断。
5.重新抛出异常
前提:如果异常处理器没有处理某个异常,或者处理器只是希望其调用者注意该异常,Java就允许处理器重新抛出异常。在try-catch块中最后使用throw关键字。这样就方便其他的调用者获得处理抛出异常的机会。
6.链式异常
7.自定义异常
注意:因为Java提供了很多的异常类,所以在不是特殊的情况下尽量避免使用自定义异常类。
通过派生Exception类或其子类(如:IOException)来创建自定义异常类。
总结:
1.异常处理能够使得一个方法给它的调用者抛出一个异常。
2.异常发生在一个方法的执行过程中,RuntimeException/Error都是免检异常,其他所有的异常都是必须检验的异常。
3.当声明一个方法时,如果这个方法抛出一个必须检验的异常,则必须声明为必须检验异常,告诉编译器可能会出现什么错误。
4.声明异常的关键字:throws,抛出异常的关键字:throw
5.异常处理是将处理代码从正常的程序中分离出来,这样的话,程序更容易处理和理解。
6.我们不应该使用异常处理代替简单的测试,应该尽可能的测试简单异常,将异常处理保留为处理那些无法使用if语句处理的异常。
抽象类和接口
1.抽象类
注意:抽象类和常规类很像,但是不能使用new关键字创建其实例。抽象方法只有定义没有实现,它的实现由子类提供,一个包含抽象方法的类必须声明为抽象类。
抽象类的构造方法定义为protected,其只能被子类使用。
注意:
1.抽象方法不能定义在非抽象类中,如果抽象父类的子类不能实现所有的抽象方法,那么子类必须定义为抽象,同时注意抽象方法是 非静态 的。
2.抽象类不能使用new关键字来初始化,但可以定义其构造方法,这个构造方法在它的子类的构造方法中可以被调用。
3.包含抽象对象的类必须是抽象的,但可以定义一个不包含抽象方法的抽象类。此时不能使用new操作符创建该类的实例。
4.如果一个类是具体的,但是其子类可以是抽象的。
2.接口
注意:由于接口中所有的数据域都是public final static而且所有的方法都是public abstract,所以Java允许忽略这些修饰符。
提示:接口中定义的常量可以使用语法:接口名.常量名(如:T.k)来访问。
总结:
1.抽象类和常规类一样,都有数据和方法,但是不能使用new操作符创建抽象类的实例。
2.非抽象类中不能包含抽象方法。如果抽象类的子类没有实现所有被继承的父类抽象方法,就必须将子类也定义为抽象类。
3.包含抽象方法的类必须是抽象类,但抽象类可以不包含抽象方法。
4.接口中只包含常量和抽象方法,接口与抽象类很类似,但是抽象类除了包含常量和抽象方法之外,还包含变量和具体方法。
5.接口java.lang.Comparable定义了compareTo()方法,Java类库中许多类都实现了Comparable。
6.
二进制I/O
Java中处理输入输出,File对象封装文件或路径属性,不包含从/向文件读/写数据的方法。为了进行I/O操作,需要使用正确的Java I/O类创建对象。
总结:I/O类可以分为文本I/O和二进制I/O,文本I/O将数据解释成字符序列,二进制I/O将数据解释成原始的二进制数值。Java自动完成对文本I/O的编码和解码。