JAVA基础知识总结——part1

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());
}


原文地址:https://www.cnblogs.com/emmaduan/p/10906154.html