面向对象
面向对象三大特性:封装,继承,多态。
继承extends或实现implements是多态的前提,多态指一个对象有多种形态。
多态的好处:无论右边new出什么子类对象,等号左边调用方法都不会发生改变。扩展性更好。
抽象类:抽象方法所在的类必须是抽象类,抽象类中也可以有普通成员方法。一般和继承息息相关。
抽象方法:在方法名前加abstract关键字,去掉大括号,直接加分号结束。
public abstract class animal{
public abstract eat();
public void method(){
Syste,.out.println("这是普通成员方法");
}
}
接口就是一种公共规范标准。它是引用数据类型。内部方法必须为抽象方法,一般和实现息息相关。
public interface 接口名称{
public abstract method();//默认且必须为为public abstract,可省略。
}
三元运算符与switch
int a = 1;
int b = 2;
int max = a<b ? a:b;
int num = 1;
switch(num){
case 1:
System.out.println("我是1");
break;
case 2:
System.out.println("我是2");
break;
default:
System.out.println("我既不是1,也不是2");
break;
}
递归算法
定义:是一种直接或间接自己调用自身算法的过曾。
特点:
1.自身调用自身
2.有明确的递归出口
3.虽然简洁,但运行效率低。
4.容易造成栈溢出,所以不提倡用递归编写程序。
git
svn是集中式版本控制系统,版本库集中放在中央服务器中,需要联网。
git为分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库。
图形化工具为tortoisegit。
要先建一个本地代码仓,把项目文件复制到,git目录下(工作区),要先添加到暂存区,再提交到本地版本库。
在GitHub上新建一个项目,当作远程仓库。
SSH:安全外壳协议,是目前较为可靠,专为远程登录会话和其他网络服务提供安全的协议,利用SSH协议可以有效防止远程管理过程中信息泄露问题。
公钥加密,私钥解密。这两把钥匙可以互相加解密。公钥负责身份验证,私钥负责数字签名。
JDK8新特性
函数式接口:有且只有一个抽象方法的接口,适用于Lambda使用的接口。
@FunctionalInterface注解可以检测该接口是否为函数式接口,如果不是,编译失败,如果是,编译成功。
函数式接口可以作参数或返回值, Lambda表达式:方法名()->{} ()里接重写方法的参数,没有则空。
Stream流是一个来自数据源的元素队列,它本身不存储数据,只是按需对数据进行处理,有延迟执行的特点。
方法引用可简化Lambda表达式,System.out::print;
Junit单元测试
测试分为黑盒测试和白盒测试。
黑盒测试:不需要写代码,给输入值,看是否能得到期望值。
白盒测试:需要写代码,关注程序的具体执行流程。
junit测试就是一种白盒测试。
junit测试使用步骤:
1.定义测试类
2.定义测试方法,最好无返回值,空参。
3.方法名前加@Test
4.导入junit依赖环境
判定结果:绿色代表成功,红色代表失败。一般我们会用断言操作来处理结果。
Assert.assertEquals(期望的结果,运算的结果)
补充:
@Before:修饰的方法会在测试方法执行之前自动执行。
@After:修饰的方法会在测试方法执行之后自动执行。
public class CalculatorTest{
//初始化方法,用于资源申请,所有测试方法在执行之前都会先执行该方法。
@Before
public void init(){
System.out.println("init...");
}
//释放资源方法,在所有测试方法执行完毕之后都会执行该方法
@After
public void close(){
System,out.println("close...");
}
//测试add方法
@Test
public void addTest(){
Calculator c = new Calculator();
int result = c.add(1,2);
Assert.assertEquals(2,result);
}
}
注解
注解:说明程序的,给计算机看的。
注解格式:@Test等
注解的作用:
1.通过代码里标识的注解生成doc文档
2.通过代码里标识的注解进行代码分析(反射)
3.通过代码里标识的注解使编译器对代码进行基本的编译检查。
自定义注解:
格式:public @interface 注解名称{ }
本质:注解本质就是一个接口,该接口默认继承Annotation接口
public interface MyAnno extends java.lang.anmotation.Annotation{ }
API
API:application programming interface 应用程序接口,是程序员的字典。
Random类
Random类是一个生成随机数的类。
Random rd = new Random(); int a = rd.nextInt(); 随机生成int范围内的数。
int b =rd.nextInt(3); 代表生成一个0到3的整数,3取不到。
Scanner类
Scanner类就是一个键盘扫描器。
Scanner类的使用步骤:
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
ArrayList集合
ArrayList集合是一个长度可变的容器,只可以存储引用类型的数据。直接打印输出的是集合中的内容而不是地址值。
ArrayList<String> list = new ArrayList<>();
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
集合框架概述及迭代器遍历
Collection接口定义了所有单列集合共性的方法,且没带索引。
List接口中的集合是有序的集合(存储和取出元素的顺序一致),允许存储重复的元素,有索引,可以使用普通for循环遍历。
Set接口中的集合不允许存储重复元素,没有索引,不能使用普通for循环遍历。其中,TreeSet集合和HashSet集合是无序的,LinkedHashSet集合是有序的。
Iterator迭代器是一个接口,可对Collection接口中的所有集中进行遍历,我们无法直接使用,需要使用Iterator接口的实现类对象。
迭代器获取方式:Collection接口有一个方法叫iterator(),这个方法返回的就是迭代器的实现类对象。
迭代器使用步骤:
1.使用集合方法中的iterator()获取迭代器实现类对象,使用Iterator接口接收(多态)
2.使用Iterator接口中的hasNext()方法判断还有没有下一个元素
3.使用Iterator接口中的next()方法取出下一个元素。
List<String> list = new ArrayList<>();
list.add("进进");
list.add("蛋蛋");
list.add(