JAVA基础知识总结
1. java的数据类型
分为两种
- 基础类型: byte,short,char,int, float,double,long, boolean
- 引用类型:接口,类
2. java的循环和逻辑控制
循环: while, do/while,for,each循环
逻辑控制: if/else, break, continue, switch
3. java的继承
子类拥有父类的所有非private方法
子类可以拥有自己的方法和属性,子类是对父类的扩展
子类可以重写父类的方法
一个类如果用final修饰,则该类不能被继承
一个方法如果用final修饰,则该方法可以被继承,但是不能被重写
如果父类里面有默认无参数构造函数,在子类的构造函数里面会默认先调用父类的无参构造函数,如果想调用父类的有参构造函数,需要使用super关键词调用
重写和重载的区别:
重写:
外壳不变,核心重写。方法名不变,方法参数列表不变,返回类型小于等于父类,抛出的exception小于等于父类,访问权限大于等于父类
重载:
方法名相同,但是参数必须不同,这些不同可以是参数的返回类型,参数的个数,等等,返回类型可以 不同。
4. java的多态
多态的意思是同一个操作在不同的对象中执行的过程不同,表现形式不同
多态有三个前提条件
继承,重写,父类引用只想子类引用
tips: 多态在编译的时候会check父类中有没有该方法,但是执行的时候是执行的子类的方法
5. java的抽象类
java的抽象类使用abstract关键词修饰
包含抽象方法的类称为抽象类
抽象类里面只有方法的声明,没有方法的实现
如果一个类继承抽象类,则必须实现所有的抽象方法,否则该类也要申明为抽象类
抽象类不能new
6. java的接口
接口是一堆抽象方法的集合
接口是隐式抽象,就是不用什么abstract,但是所有的方法都是抽象方法
接口可以实现,使用implements关键词实现
7. java的io
流分为两类
字节流: 基于InputStream、OutoutStream
字符流: 基于Reader 、Writer
如果确定读取的是字符,可以使用字符流,如果读取的可能是二进制,则使用字节流。字节流可以使用InputStreamReader进行装换
读取文件:
BufferReader bufferReader = new BufferReader(new FileReader(new File(""))); bufferReader.readline(); String line; while((line=bufferReader.readline())!=null){ System.out.printlin(line); }
写文件:
适用于文件不是很大的情况
FileWriter fileWriter = new FileWriter(new File("xxxx")); fileWriter.write(stringBuffer.toString());
文件大的话应该使用bufferWriter
BufferedWriter fileWriter = new BufferedWriter(new FileWriter(new File("xxxx"))); fileWriter.write(stringBuffer.toString()); fileWriter.flush(); fileWriter.close();
tips: 发现不做flush,文件会出现部分,不全,原因需要调查
A: 调查后发现因为FileWriter写文件的时候会设置一个缓冲区,当缓冲区满了的时候,才会向外写,所以可能在最后一部分的时候缓冲区没有满,没有flush让数据强制书写的话就会丢失一部分数据,所以做flush是必须的
8. java的集合
集合的概念: 在java中,我们常常需要储存多个数据,然而我们又不能确定它的长度,所以不能使用数组,所以集合就被引入了。用来储存动态增长的多个数据集。
集合的分类: 主要分为两大类
—Collection
——List: 有序
——Set: 无序,没有重复的元素
——Queque: 先进先出的队列
——Map:
——键值对,key必须是唯一的
Collection
set:
HashSet——底层的数据结构为哈希表,无序
TreeSet——底层的数据结构为二叉树,有序
因为collection都继承于Iterable,所以他都是可以使用for each和iterator循环的。
8.1 Set——HashSet
set的元素不重复,是无序的,查找慢,效率低
新建一个set
Set<String> set = new HashSet<String>();
set.add("a")
set.add("b")
set.add("c")
set.add("d")
set.add("e")
set.add("a")
然后输出set,你会发现没有a,因为a是重复的元素。
Iterator<String> ite=list.iterator();
while(ite.hasNext())//判断下一个元素之后有值
{
System.out.println(ite.next());
}
结果b,c,d,a,e
Q1: set是如何判断元素是否重复呢?
使用hashcode和equals,因为string已经重写了hashcode和equals方法,所以我不用自己写。 正常的情况是先比较hashcode值是否一样,如果一样再使用equals方法比较是否一样,如果都一样则拒绝加入,如果不一样则加入。所以在set里面是自己的元素的集合的时候,比如加入的是多个student对象,则需要重写equals和hashcode方法,这样才能添加。
8.2 Set——TreeSet
treeset是实现的二叉树。是一个可以排序的没有重复元素的集合。
新建一个treeSet
Private static void TestTreeSet(){
Set<String>treeSet=newTreeSet<String>();
treeSet.add("A");
treeSet.add("B");
treeSet.add("C");
treeSet.add("D");
treeSet.add("E");
treeSet.add("A");
printElement(treeSet);
}
Private static voidprintElement(Setset){
Iterator<String>e=set.iterator();
while(e.hasNext()){
System.out.println(e.next());
}
}
如果一个对象的集合想要使用treeset,则必须实现comparable接口,重写compreTo方法。
8.3 List
List存储的是有序的可重复的元素。常用的有ArrayList和LinkedList
常用的方法:
添加:
Add
addAll
删除:
Clear
Remove
改:
Set
循环:
Iterator
8.4 Queque
8.5. Map
map用来储存的是键值对。key必须是唯一的,values可以重复。
Map<String,String>map=newHashMap<String,String>();
map.put("1","student1");
map.put("2","student2");
map.put("3","student3");
map.put("4","student4");
map.put("5","student5");
循环:
方法一:
Set<String>keySet=map.keySet();
for(Stringkey:keySet){
System.out.println(key+","+map.get(key));
}
方法二:
Set<Map.Entry<String,String>>test=map.entrySet();
for(Map.Entry<String,String>entry:test){
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}