Java编程基础篇

计算机、程序和Java概述

计算机组成

  • 中央处理器(cpu)
  • 内存(主存)
  • 存储设备
  • 输入设备
  • 输出设备
  • 通信设备
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

基本程序设计

标识符

标识符必须遵循一下规则:

  • 标识符是由字母,数字,下划线(_)和美元符号($)构成的字符序列
  • 标识符必须以字母,下划线和美元符号开头,不能以数字作为开头
  • 标识符不能是保留字
  • 表示符不能是 true,false 和 null
  • 标识符的长度可以为任意

数值数据类型

类型名名称范围存储大小
byte-27(-128) ~ 27-1(127)8位带符号数
short-215(-32 768) ~ 215-1(32 767)16位带符号数
int-231(-2 147 483 648) ~ 231-1(2 147 483 647)32位带符号数
long-263(-9 223 372 036 854 775 808) ~ 263-1(9 223 372 036 854 775 807)64位带符号数
float负数范围:-3.4028235E+38 ~ -1.4E-45
正数范围: 1.4E-45 ~ 3.4028235E+38
32位,标准IEEE745
double负数范围:-1.7976931348623157E+308 ~ -4.9E-324
正数范围: 4.9E-324 ~ 1.7976931348623157E+308
64位,标准IEEE745

格式化控制台输出

在这里插入图片描述
在这里插入图片描述

输出宽度最少为10,如果不够10位则在前面加对应的空格,如:
126.041631654
%.2f 取小数点后两位,126.04
目前长度为6,则在输出的126.04前添加4个空格

double number = 126.041631654
System.out.printf("This is number: %10.2f",number);

// 输出
This is number:     126.04
// 正数表示右对齐
System.out.printf("%10s%10s%10s%10s\n","name","sex","age","id_num");
// 负数表示左对齐
System.out.printf("%-10s%-10s%-10s%-10s","name","sex","age","id_num");

// 输出
      name       sex       age    id_num
name      sex       age       id_num 

输入输出重定向

  • Redirection .java
import java.util.Scanner;
public class Redirection {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int data = scanner.nextInt();

        int sum = 0;

        while (data != 0){
            sum += data;

            data = scanner.nextInt();
        }

        System.out.println("The sum is: " + sum);
    }
}

  • input.txt
1 2 3 4 5 6
7 8 9 10 0

输入重定向

javac Redirection.java
java Redirection < input.txt

# 输出
The sum is: 55

输出重定向

java Redirection > output.txt

# 将结果写入到output.txt中
The sum is: 55

输入输出重定向

java Redirection < input.txt > output.txt

# 读取input.txt中的内容,然后将结果写入到output.txt中
The sum is: 55

方法重载

  • 在同一个类中
  • 具有相同的方法名
  • 参数列表不同(类型,个数,顺序不同),与返回值无关

变量的范围

  • 局部变量

数组

声明数组变量

elementType[] arrayRefVar;

创建数组

arrayRefVar = new elementType[arraySize];

初始化数组

elementType[] arrayRefVar = {value0,value1,value2,.......,valueN};

可边长参数

typeName... parameterName

二维数组

int[][] matrix;
matrix = new int[5][5];

静态变量、常量和方法

静态变量被类中的所有对象共享,静态方法不能访问类中的实例成员

静态变量

静态变量将变量存储在一个公共的内存地址

限定字符串

String类型的对象是不可变得,如果两个直接字符量相同的话,他们都会指向同一个String类型的对象中,这个独特的对象称之为限定字符串对象

StringBuilder和StringBuffer

  • String与StringBuilder和StringBuffer的区别
    String是不可变的字符串,而StringBuilder和StringBuffer都是可边的字符串,相比String它们二者更加灵活

  • StringBuilder和StringBuffer的区别
    两者基本是一样的,除了StringBuffer中修改缓冲区的方法是同步的,这就意味着如果是并发访问的话,StirngBuffer可以同步防止程序崩溃

继承

super关键字

  1. 调用父类的构造方法(调用构造方法的时候,必须放在子类构造方法的第一行)
  2. 调用父类的方法

方法重写:需要在子类中使用和父类一样的签名,以及相同的返回值类型进行定义

静态方法:静态方法可以被继承,但是不能够被重写,如果子类中定义了相同的方法,那么父类的静态方法将会隐藏起来,可以使用superClassName.staticMethonName调用隐藏的静态方法

方法重载和重写

重载意味着使用同样的名字但是不同的签名来定义多个方法。
重写意味者在子类中提供一个对方法的新的实现。

多态

多态意味着父类的变量可以指向子类对象

动态绑定

访问修饰符

在这里插入图片描述

异常处理和文本I/O

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

File类

使用Try-with-resource自动关闭资源

try(需要打开的资源;) {操作}

// try-with-resource
        try(
        	PrintWriter printWriter = new PrintWriter(file);
        ) {
            printWriter.print("John T Smith ");
            printWriter.println(90);
            printWriter.print("Eric K Jones ");
            printWriter.println(85);
        }
        
// 上下等价
		PrintWriter printWriter = new PrintWriter(file);
		
		printWriter.print("John T Smith ");
		printWriter.println(90);
		printWriter.print("Eric K Jones ");
		printWriter.println(85);
		
		printWriter.close();

抽象类和接口

抽象类

抽象类不可用于创建对象。抽象类可以包含抽象方法,这些方法将在具体的子类中实现

  • 抽象方法不能包含在非抽象类中。如果抽象父类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象的。换句话说,在抽象类扩展的非抽象子类中,必须实现所有的抽象方法。还要注意到,抽象方法是非静态的
  • 抽象类是不能使用 new 操作符来初始化的。但是,仍然可以定义它的构造方法,这个构造方法在它的子类的构造方法中调用
  • 包含抽象方法的类必须是抽象的。但是,可以定义一个不包含抽象方法的抽象类。在这种情况下,不能使用 new 操作符创建该类的实例。这种类是用来定义新子类的基类的
  • 子类可以覆盖父类的方法并将它定义为 abstract。这是很少见的,但是它在当父类的方法实现在子类中变得无效时是很有用的。在这种情况下,子类必须定义为abstract
  • 即使子类的父类是具体的,这个子类也可以是抽象的。例如,Object 类是具体的,但是它的子类如 CeometricObject 可以是抽象的
  • 不能使用 new 操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型

接口

接口是一种与类相似的结构,只包含常量和抽象方法

  • 接口定义
修饰符 interface 接口名{
	/** 常量声明 */
	/** 方法签名 */
}
  • 接口的继承
    利用关键字 extends, 接口可以继承其他接口。这样的接口称为子接口(subinterface)。
public interface NewInterface extends Interface1,Interface2,...InterfaceN{}

接口与抽象类的比较

在这里插入图片描述

类的设计原则

  • 内聚性
    类应该描述一个单一的实体,而所有的类操作应该在逻辑上相互配合,支持一个一致的目的。例如:可以设计一个类用于学生,但不应该将学生与教职工组合在同一个类中,因为学生和教职工是不同的实体

  • 一致性
    遵循标准 Java 程序设计风格和命名习惯。为类、数据域和方法选取具有信息的名字。通常的风格是将数据声明置于构造方法之前,并且将构造方法置于方法之前

  • 封装性
    一个类应该使用 private 修饰符隐藏其数据,以免用户直接访问它。这使得类更易于维护

  • 清晰性
    为使设计清晰,内聚性、一致性和封装性都是很好的设计原则。除此之外,类应该有一个很清晰的合约,从而易于解释和理解

  • 完整性
    类是为许多不同用户的使用而设计的。为了能在一个广泛的应用中使用,一个类应该通过属性和方法提供多种方案以适应用户的不同需求

  • 实例和静态
    依赖于类的具体实例的变量或方法必须是一个实例变量或方法。如果一个变量被类的所有实例所共享,那就应该将它声明为静态的

  • 继承与聚合
    继承和聚合之间的差异,就是 is-a (是一种)和 has-a (具有)之间的关系

  • 接口和抽象类
    接口比抽象类更加灵活,因为一个子类只能继承一个父类,但是却可以实现任意个数的
    接口

小结

  1. 抽象类和常规类一样,都有数据和方法,但是不能用 new 操作符创建抽象类的实例
  2. 非 抽 象 类 中 不 能 包 含 抽 象 方 法。如果抽象类的子类没有实现所有被继承的父类抽象方法,就必须将该子类也定义为抽象类
  3. 包含抽象方法的类必须是抽象类。但是,抽象类可以不包含抽象的方法
  4. 即使父类是具体的,子类也可以是抽象的
  5. 接口是一种与类相似的结构,只包含常量和抽象方法。接口在许多方面与抽象类很相近,但抽象类除了包含常量和抽象方法外,还可以包含变量和具体方法
  6. 在 Java中,接口被认为是一种特殊的类。就像常规类一样,每个接口都被编译为独立的字节码文件
  7. 接口 java.lang.Comparable 定义了 compareTo 方法。Java 类库中的许多类都实现了 Comparable
  8. 接口 java.lang.Cloneable 是一个标记接口。实现 Cloneable 接口的类的对象是可克隆的
  9. 个类仅能继承一个父类,但一个类却可以实现一个或多个接口
  10. — 个接口可以继承一个或多个接口

内部类

内部类,或者称为嵌套类,是一个定义在另外一个类范围中的类。内部类对于定义处理器类非常有用

内部类特征

  • — 个内部类被编译成一个名为 OuterClassName$InnerClassName 的类
  • 一个内部类可以引用定义在它所在的外部类中的数据和方法。所以,你没有必要将外部类对象的引用传递给内部类的构造方法。基于这个原因,内部类可以使得程序更加精简
  • 一个内部类可以使用可见性修饰符所定义,和应用于一个类中成员的可见性规则一样
  • 一个内部类可以被定义为 static。一个 static 的内部类可以使用外部类的名字所访问。一个 static 的内部类不能访问外部类中非静态的成员
  • 内部类对象通常在外部类中所创建。但是你也可以从另外一个类中来创建一个内部类的对象。如果内部类是非静态的,你必须先创建一个外部类的实例,然后使用以下语法来创建一个内部类的对象:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();

ControlCircle controlCircle = new ControlCircle();
ControlCircle.CirclePane circlePane = controlCircle.new CirclePane();
  • 如果内部类是静态的,使用以下语法来创建一个内部类对象:
OuterClass.InnerClass innerObject = new OuterClass.InnerClass();

匿名内部类

一个匿名内部类是一个没有名字的内部类。他将一步实现定义一个内部类以及创建一个内部类的实例

new SuperClassName/InterfaceNameO { 
// Implement or override methods in superclass or interface

// Other methods if necessary
}

匿名内部类的特征

  • — 个匿名内部类必须总是从一个父类继承或者实现一个接口,但是它不能有显式的extends 或者 implements 子句
  • 一个匿名内部类必须实现父类或者接口中的所有抽象方法
  • — 个匿名内部类总是使用它父类的无参构造方法来创建一个实例。如果一个匿名内
    部类实现一个接口,构造方法是 Object()
  • 一个匿名内部类被编译成一个名为 OuterClassNameSn.class 的类。例如,如果外部类 Test 有两个匿名的内部类,它们将被编译成 Test$1.class 和 Test$2.class

二进制I/O

二进制I/O类(字节流)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FileInputStream & FileOutputStream

FilelnputStream 类和 Fi1eOutputStream 类用于从/向文件读取/写人字节。它们的所有方法都是从I叩utStream 类和 OutputStream 类继承的

  • FileInputStream构造方法
    在这里插入图片描述
  • FileOutputStream构造方法在这里插入图片描述

DataInputStream & DataOutputStream

DatalnputStream 从数据流读取字节,并且将它们转换为合适的基本类型值或字符串。DataOutputStream 将基本类型的值或字符串转换为字节,并且将字节输出到数据流。

  • DataInputStream
    在这里插入图片描述
  • DataOutputStream
    在这里插入图片描述

BufferedInputStream & BufferedOutputStream

BufferedlnputStream 类和 BufferedOutputStream 类可以通过减少磁盘读写次数来提髙输人和输出的速度。使用 Bufferdl叩utStream 时,磁盘上的整块数据一次性地读入到内存中的缓冲区中。然后从缓冲区中将个别的数据传递到程序中

  • BufferedInputStream构造方法
    在这里插入图片描述
  • BufferedOutputStream构造方法
    在这里插入图片描述

ObjectInputStream & ObjectOutputStream

ObjectlnputStream 类和 ObjectOutputStream 类除了可以实现基本数据类型与字符串的输人和输出之外,还可以实现对象的输人和输出

  • ObjectInputStream
    在这里插入图片描述

  • ObjectOutputStream
    在这里插入图片描述

随机访问文件

Java 提供了 RandomAccessFile 类,允许在文件的任意位置上进行读写。使用 RandomAccessFile 类打开的文件称为随机访问文件

在这里插入图片描述
注:当创建一个 RandomAccessFile 时,可以指定两种模式( “r”或"rw") 之一。模式"r"表
明这个数据流是只读的,模式"rw"表明这个数据流既允许读也允许写

RandomAccessFile raf = new RandomAccessFi1e("test.dat", "rw"):

递归

递归方法就是直接或间接调用自身的方法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Programming is an art. Although traditional art imitates life, programming simulates life. Every abstract concept in programming, and to a great extent in the fi eld of computer science, has its roots in our daily life. For example, humans and possibly all other living forms were multiprocessing long before the term entered into computer science lingo. Th erefore, any concept in programming can in fact be illustrated through examples from our dayto-day life. Such an approach not only enables the student to assimilate and internalize the concept presented in a programming situation but also provides a solid foundation for the very process of programming, namely, the simulation of the real world. Unfortunately, textbooks currently on the market do not exploit this fact through examples or meaningful discussions. Th us, for many students, an abstract concept remains abstract. Th is is especially true in the case of object-oriented programming. Th e “wow moment” one gets by seeing programming as a simulation of the real-world situation is never realized. Th is book on Java programming teaches object-oriented design and programming principles in a completely integrated and incremental fashion. Th is book allows the reader to experience the world we live in as object-oriented. From the very outset the reader will realize that everything in this world is an object. Every concept of object-oriented design is fi rst illustrated through real-life analogy. Corresponding Java language constructs are introduced in an integrated fashion to demonstrate the programming required to simulate the real-world situation. Instead of compartmentalizing all the object-oriented concepts into one chapter, this book takes an incremental approach. Th e pedagogy of this book mirrors the classroom style the author has developed over the years as a teacher of computer science. In particular, every programming concept is introduced through simple examples followed by short programming examples. Case studies at the end of each chapter illustrate various design issues as well as the usefulness of many new concepts encountered in that chapter. Java has emerged as the primary language for soft ware development. From a soft ware engineering perspective, object-oriented design has established itself as the industry standard. Th us, more and more teaching institutions are moving toward a CS1 course that teaches Java programming and object-oriented design principles. A common approach followed in many textbooks on the market is to introduce object-oriented concepts from the very beginning and ignore many traditional programming techniques completely. Th e objective of this book is to present object-oriented programming and design without compromising the training one needs on traditional programming constructs and structures.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值