1.1 基础编程模型
此部分与java基础重复,只说明几点容易出现和出错的点。
1.字符串类型转换
如,String值和数字之间互相转换的API:
public class Integer{
static int parseInt(String s) //将字符串s转换为整数
static String toString(int i) //将整数i转换为字符串
}
2.命令和参数
3.白名单过滤
测试用例会通过模拟实际情况来展示当前算法的必要性,这种过程称为白名单过滤。
4.Java表达式1/0和1.0/0.0的值是什么?
第一个表达式产生一个运行时除以零异常(将终止程序);第二个表达式的值是Infinity(无穷大)。
1.2数据抽象
1.什么是数据抽象?
定义和使用数据类型,叫做数据抽象。抽象数据类型的重要性在于在程序设计上,它们支持封装,即
1)以API形式准确定义问题;
2)用API的实现描述算法和数据结构。
2.对象
对象是能够承载数据类型的值的实体。对象有三大重要特性:状态、标识和行为。
对象的状态即数据类型的值,对象的标识能够将一个对象区别于另一个对象,对象的行为就是数据类型的操作。
(1)创建对象
用关键字new触发类的构造器,构造器没有返回值,总是返回它的数据类型的对象的引用。每当用例调用了new(),系统都会:
1)为新的对象分配内存空间;
2)调用构造函数初始化对象中的值;
3)返回该对象的一个引用。
(2)调用实例方法
静态方法主要作用是实现函数,非静态(实例)方法主要作用是实现数据类型的操作。
(3)使用对象
可以将对象在该类里直接调用方法实现功能,也可以将对象作为参数传递给方法,也可以将对象作为返回值。
3.抽象数据类型实现
以一个Counter类的实现为例:
(1)实例变量
访问实例变量都需要通过一个对象,Counter含有两个实例变量,一个String类型的name和一个int类型的值count。
(2)构造函数
每个Java类都至少含有一个构造函数以创建一个对象,如果没有定义构造函数,系统会隐式定义一个默认不接受任何参数的构造函数并将所有实例变量初始化为默认值(如double类型初始化为0.0,boolean类型默认为false,整数类型默认为0,引用类型变量默认为Null)。构造函数的名称总是与类名相同。上面代码中的public Counter(String id)就是程序猿自定义的构造器。
(3)实例方法
每个实例方法都有一个返回值类型、一个签名(方法名、所有参数变量类型和名称)和一个主体。如上面代码中的
public void increment(){
count++;
}
public是可见性修饰符,void是返回值类型,increment是方法名,“public void increment()”是一个签名。
(4)API
API的作用是将使用和实现分离,以实现模块化编程。比如上面的Counter类:
4.数据类型的设计
(1)封装及封装类型
封装允许我们独立开发用例和实现的代码,也隔离了数据类型的操作。
Java内置了一些内置的引用类型,称为封装类型。每种原始数据类型都有一个对应的封装类型。
(2)接口继承(实现继承)
如定义接口和其实现类如下:
//定义接口Datable
public interface Datable{
int month();;
int day();
int month();
}
//Date实现接口Datable
public class Date implements Datable{
//实现代码
}
在Java中,每个类都是Object的子类,也就是说每个类都有getClass()、toString()、equals()和hashCode()方法,一般我们都会重载新类的toString()、equals()和hashCode()方法,设置为自己需要的功能实现。
(3)等价性
两个对象相等意味着它们的引用相同。例如,如果x和y均为String类型的值,那么当且仅当x和y的长度相同且每个位置的字符均相同x.equals(y)的返回值为true。请注意,同一种类型的所有对象的getClass()方法一定能够返回相同的引用。
(4)内存管理
回收内存的方式叫做垃圾回收,Java的一个特点就是它不允许修改引用的策略,这使得Java能够高效自动的回收垃圾,相关的回收原理请查阅其他资料。(或简单参考另一篇博客:https://blog.csdn.net/qq_38379983/article/details/89192878)
(5)不可变性
在我们的代码中,用final修饰值不会改变的实例变量。而String对象是系统默认不可变的(符合我们一般不希望改变String的值),Java数组是可变的(符合我们希望改变数组中的值),也可以使用可变字符串(java的StringBulider类存在的目的)和不可变数组(之后介绍的Vector类)。
学习永不止步,继续加油~