study-notes(1 JavaSE)-1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wpwbb510582246/article/details/83588056

这篇文章是将自己所学技术按模块划分总结而成的笔记,包含了 JavaSE、JavaWeb(SpringMVC、Spring、MyBatis、SpringBoot、SpringCloud 等)、Linux、Hadoop、MapReduce、Hive、Scala、Spark 等,希望通过这些笔记的总结,不仅能让自己对这些技术的掌握更加深刻,同时也希望能帮助一些其他热爱技术的人,这些笔记后续会继续更新,以后自己学习的其他最新技术,也都会以这样笔记的形式来保留,这些笔记已经共享到 Github,大家可以在那里下载到 Markdown 文件,如果大家在看的时候有什么问题或疑问,可以通过邮箱与我取得联系,或者在下面的评论区留言,同时也可以在 Github 上与我进行互动,希望能与大家一起相互学习,相互进步,共同成长。

本篇文章 Github 地址 : https://github.com/wpwbb510582246/study-notes/blob/master/1 JavaSE/1 JavaSE.md

项目 Github 地址 : https://github.com/wpwbb510582246/study-notes

email : [email protected]

博客地址 : https://blog.csdn.net/wpwbb510582246

1 JavaSE

1.1权限

1.1.1 Java中的四种访问权限

public、protected、default、private,其中public具有最大权限,private则是最小权限。成员变量使用private (隐藏细节)、构造方法使用public (方便创建对象)、成员方法使用public (方便调用方法)。

1.2 内部类

1.2.1 匿名内部类

匿名内部类是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的匿名的子类对象。

public interface FlyAble {
    // 抽象方法 :
    void fly();
}
public class Test {
    public static void main(String[] args) {
// 写法一 : 多态语法
FlyAble flyAble = new FlyAble() {
    @Override
    public void fly() {
System.out.println("鸟儿在天上飞 ...");
    }
};
showFly(flyAble);
    }

    public static void showFly(FlyAble flyAble) {
// 调用 fly 方法
flyAble.fly();
    }
}

1.3 引用

1.3.1 引用类型方法总结

类作为成员变量,用于丰富类的定义;接口是对方法的封装,用于扩展类的功能。

1.4 常用 API

1.4.1 DateFormat

构造方法:public SimpleDateFormat(String pattern),参数pattern是一个字符串,代表日期时间的自定义格式。常用的格式规则为:

标识字母(区分大小写) 含义
y
M
d
H
m
s

format方法:public String format(Date date),将Date对象格式化为字符串。

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把Date对象转换成String
*/
public class Demo03DateFormatMethod {
    public static void main(String[] args) {
Date date = new Date();
// 创建日期格式化对象,在获取格式化对象时可以指定风格
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = df.format(date);
System.out.println(str); // 2008年1月23日
    }
}

parse方法:public Date parse(String source),将字符串解析为Date对象。

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把String转换成Date对象
*/
public class Demo04DateFormatMethod {
    public static void main(String[] args) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = "2018年12月11日";
Date date = df.parse(str);
System.out.println(date); // Tue Dec 11 00:00:00 CST 2018
    }
}

1.4.2 Math

1.4.2.1 random

//    产生一个从 a 到 b 的随机数的方法 : 先用 random.nextDouble() 产生一个从 0 到 1 的小数,然后乘以 (b - a) , 然后再加上 a , 然后再将得到的结果转化为整数.
private static int getRandom(int a, int b) {
    return (int)(Math.random() * (b - a) + a);
}

1.4.3 ResourceBundle

//    读取 classpath 路径下的 my.properties 文件
ResourceBundle bundle = ResourceBundle.getBundle("my");
//    先读取 classpath 路径下的 my_zh_CN.properties 文件,如果该文件不存在,则读取 my_zh.properties 文件,如果该文件不存在,则读取 my.properties 文件
ResourceBundle bundle = ResourceBundle.getBundle("my", new Locale("zh", "CN"));

1.4.4 StringUtils (org.apache.commons.lang3.StringUtils)

1.4.4.1 isNotBlank

if (StringUtils.isNotBlank(key)) {
    criteria.orLike("title", "%" + key + "%");
}

1.4.4.2 join

List<String> names = categories.stream().map(Category::getName).collect(Collectors.toList());
String name = StringUtils.join(names, " ");

1.4.4.3 substringBefore

StringUtils.substringBefore(sku.getImages(), ",")

1.4.5 CollectionUtils (org.springframework.util.CollectionUtils)

1.4.5.1 isEmpty

if (CollectionUtils.isEmpty(specGroups)) {
    throw new LyException(ExceptionEnum.SPEC_GROUP_NOT_FOUND);
}

1.5 集合

1.5.1 什么是集合,集合和数组的区别是什么

集合是java中提供的一种容器,可以用来存储多个数据。

集合和数组的区别:

数组的长度是固定的。集合的长度是可变的。

数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。

1.5.2 简述集合框架

集合是单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.Listjava.util.Set。其中,List的特点是元素有序、元素可重复。Set的特点是元素无序,而且不可重复。List接口的主要实现类有java.util.ArrayListjava.util.LinkedListSet接口的主要实现类有java.util.HashSetjava.util.TreeSet

1.5.3 什么是迭代

迭代是指Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

1.5.4 增强for循环的原理是什么

增强for循环的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

1.5.5 List接口的特点

它是一个元素存取有序的集合。

它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。

集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

1.5.6 HashSet去除重复的原理

通过hashCode与equals方法,保证了元素的唯一性。

1.5.7 Comparable和Comparator两个接口的区别

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

1.5.8 List和Set接口的区别

List接口:有序、可重复

Set接口:无序、不可重复

1.5.9 为什么ArrayList类的父类和爷爷类都是Abstract类

父类:AbstractList implements List List接口定义了很多方法. 而Abstarct类没有对应List接口的方法进行所有实现, 因为该类包含了抽象方法, 所以该类必须被定义为 ‘抽象类’. 无法实例化对象.

爷爷类:AbstractCollection implements Collection Collection接口中同样定义了很多方法. AbstractCollection类并没有对该接口进行全部方法的实现, 因此该类中也包含抽象方法, 所以该类必须被定义为抽象类, 抽象类无法实例化对象.

1.5.10 AbstractList & AbstractCollection两个类都无法被实例化, 那么其存在的目的是什么

存在的目的就是为了给下一代类提供功能. 下一代类就可以直接继承父类中已经完成的功能, 无需再次实现了.

1.5.11 为什么ArrayList就可以实例化对象了呢

因为ArrayList类将AbstractList & AbstractCollection类中没有实现的方法, 进行了全部实现, 因此该类就不再为抽象类了.

1.5.12 Collection集合体系

1530273400549

1.5.13 Map 的特点

  1. Map中的集合为双列集合,元素是成对存在的,每个元素由键与值两部分组成,通过键可以找对所对应的值.
  2. Map 中的集合不能包含重复的键,值可以重复,每个键只能对应一个值.

1.5.14 HashSet 和 HashMap 之间有什么关系

  1. HashSet 是单列集合.
  2. HashMap 是双列集合.
  3. HashSet 实现 Set 接口,由哈希表 ( 实际上是一个 HashMap 实例 ) 支持,只要创建一个 HashSet 集合,底层创建的就是 HashMap 集合.
  4. HashSet 底层就是 HashMap 支持,但是,HashSet 仅仅使用了 HashMap 的 key,而没有使用 HashMap 的 value.

猜你喜欢

转载自blog.csdn.net/wpwbb510582246/article/details/83588056
今日推荐