@[TOC]我的实训日志
我的实训日志第一天0715
今天是第一天,实训开始,没有早自习和晚自习,老师讲课时间相对较少,下午办事还花掉一部分时间,总结一下我的收获
上午时间和下午时间
上午介绍了IDE的选择,老师推荐idea和eclipse,因为这个比较贴近企业。
我选择的是idea,但是老师上课先使用的是eclipse,虽然IDE不同,但是我觉得这些应该都是相通的。
主要内容:
- java的数据类型有哪些?(基本数据类型和引用数据类型)
基本数据类型:四个数字:byte、short、int、long
两个浮点数:float、double
char和boolean
引用数据类型:类、数组、接口 - java的内存模型,有堆区,栈区,工作区
在jdk1.8之后,有个字符串常量池从工作区转移到堆区。
堆区存放的是使用new创建的变量,栈区存放的是栈帧,每个函数执行就会创建一个栈帧,栈帧有存放临时变量的位置,在函数里声明的变量,例如int a = 1; 在函数执行的时候就会创建一个栈帧,里面就会有a=1这个变量。在函数执行完毕的时候,函数就会出栈,连同临时变量都要一同销毁。 - String StringBuffer StringBuilder
String是一个final修饰的类,不可以被继承,底层是一个不可变的char数组。说不可以变的意思不是string a=“a”;之后a=“b”;不可以执行,而是在a=“a”时,在常量池里创建了一个“a”对象,而当执行到a="b"时,jvm是在常量池里创建一个新常量“b”,使a变量指向“b”,原来的常量“a”并没有消失,还是存在的,这个就是不可变的意思。这个也是string和stringbuffer与stringbuilder的差别。
StringBuilder和StringBuffer的差别主要是在StringBuilder是非线程安全的,StringBuffer是线程安全的。在工作中一般是使用StringBuilder。 - ArrayList和LinkedList
ArrayList插入效率和linkedlist的插入效率相比,如果在尾部插入,两者差不多,如果在中间插入则linkedlist比较快速。如果是查询ArrayList查询速度非常快。
ArrayList有个容量的问题,如果超过容量之后,则需要扩容,扩容的规则是先扩大1.25倍,可以得到新容量的值a,在看老容量加上添加的数据的量可以得到新加总量b,两个取大的作为最终数据的容量值。
linkedlist没有容量的概念。 - hashtable和hashmap的区别
两者都是存放键值对,区别就在于hashtable是不可以有null键的,而hashmap是可以有null键的。 - 参数传递的时候,需要传递方法需要怎么实现?
在jdk1.8之前,使用的是匿名内部类,在1.8之后使用的是λ表达式。
方法传递一定要借助一个接口,首先定义一个接口。
package com.xwq.test;
public interface Myinterface {
public int add(int a ,int b);
}
接口中有一个抽象方法,返回值int,参数a和b,名称add。
在主类中,写一个方法,参数传接口,
public static int NoNameClass(int a, int b, Myinterface myinterface) {
return myinterface.add(a,b);
}
方法body里返回的是接口的抽象方法。
在main方法中,调用此方法,采用此方式调用:
int result = NoNameClass(30, 50, new Myinterface() {
@Override
public int add(int a, int b) {
return a+b;
}
});
前两个参数都是int类型的数字,第三个参数在声明的时候是一个接口,调用时可以使用new一个接口,紧接着就要实现这个方法,在实现这个方法的时候,你可以做出你对前两个参数的操作。
这个new Myinterface就叫匿名内部类。
λ表达式是在调用的时候使用如下方法:
int result = NoNameClass(30, 50, ((a, b) -> {
return a+b;
}));
System.out.println(result);
这两种方法与平常的函数的区别:
普通函数都是固定事件(对数的操作),参数变动。
现在这种函数可以说是参数固定,操作变动