2021-04-01

1、方法的重载是java多态的体现
2、类中调用本类构造方法用this(表示当前对象)
3、封装:把信息隐蔽。通过成员变量私有化,提供给外界公有化的方法
static(共享的):使之成为类共享,不建议使用(原因:在类加载的时候就产生,占内存)
final(不可变的):修饰变量:该变量变为常量;修饰方法:不可以被子类复写;修饰类:则类不可以被继承
接口:就是为了弥补java单继承的不足(修饰接口要用static<用类名调用>或default<对象调用>)
内部类:当前类需要继承两个或两个以上的类时
1、普通内部类
Outer o = new outer();
Outer.Inner i=o.new Inner();
2、静态内部类
Outer.Inner i = new Outer.Inner();
内部类想访问外部成员是用Outer.this访问
3、方法中的内部类
4、匿名内部类
public static void main(String[] args) {
Outer outer = new Outer();
Obj obj = new Obj();// 通常我们都要获得一个实现接口的类对象
outer.operator(obj);//然后调用
/**
* 但是匿名内部类直接在方法参数的地方new接口或抽象类来直接用
*/
outer.operator(new Operator() {

        @Override
        public void test() {
            System.out.println("匿名内部类的实现");
        }
    });
}

lombda表达式:

    /**
     * 因为接口中方法的参数为空,固此处也为空(lombda表达式就是匿名内部类的优化写法)
     */
    outer.operator(() -> {
        System.out.println("lombda表达式");
    });
******包装类的功能,JDK5.0之前装箱和拆箱都是手写,在这之后都是自动拆装箱

实现多线程的方法
1.继承Thread
2.实现Runnable接口
synchronized(同步),资源是共享的,把当前对象锁住,当我操作完之后下一个才能操作
例:我去买瓶水,我没付钱或者决定不买之前,下一个顾客不能来
枚举:
修饰符 enum 枚举名{
枚举值1,
枚举值2,
枚举值N;
}

枚举的遍历
for (ESeason x;ESeason.values()) {
System.out.println(x);
}
switch的表达式可以使枚举类型
ESeason s=ESeason.AUTUMN;
Switch(s){
case SPRING:System.out.println("春天");break;
case SUMMER:System.out.println("夏天");break;
case AUTUMN:System.out.println("秋天");break;
case WINNER:System.out.println("冬天");break;
}
泛型:(可以写在类、方法上)E(集合类型的泛型)、T(普通类型的泛型)、K,V(键值对类型的泛型)
局限:1.类型参数不能实例化
new E();//error
正确应该:
GenericGroup<Integer> genericGroup = new GenericGroup();
2.不能实例化类型参数的数组
E[] arr = new E[10];//error
可以声明出来E类型的数组,但是不能实例化
3.类的静态变量不能声明为类型参数类型
public static E name;//error
4.泛型类不能继承自Throwable以及其子类
public class Problem<T> extends Exption//error
泛型与子类继承:
GenericGroup<Integer> gi= new GenericGroup();
GenericGroup<Number> gn= new GenericGroup();
gn=gi;//error
但是可以向Number中添加一个Integer数据
gn.add(88)
泛型与接口:
在implents时就要确定泛型的类型

集合框架:
Vector<Integer> vector = new Vector<Integer>(10);
vector.add(1);
vector.add(2);
vector.add(3);
System.out.println(vector.capacity());
System.out.println(vector.size());
Enumeration<Integer> enumeration = vector.elements();
while (enumeration.hasMoreElements()) {
System.out.println(enumeration.nextElement());
}
/**
* Collection--List有序可重复、Set无序不重复(TreeSet(可以进行排序操作)、hashSet)、Queue(队列) 后进先出、 Map键值对
*/
*LinkedeList和ArrayList的区别

1、数据结构不同

ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。

2、效率不同

当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。

当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。【视频教程推荐:Java视频教程】

3、自由性不同

ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。

4、主要控件开销不同

ArrayList主要控 件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。

迭代器:
Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }

双向迭代器
ListIterator<String> listiterator = list.Listiterator();
    while (listiterator.hasNext()) {
        System.out.println(listiterator.next());
    }


比较器:Comparable(当前对象跟传入对象比较)适合做排序操作
    Comparator(直接比较俩对象)适合对集合整体排序
Map的三种遍历方式: 
    Map<String, String> map = new HashMap<>();
    map.put("1", "qweqfwasavf");
    map.put("2", "sagfvdse");
    Iterator<String> iterator = map.keySet().iterator();
    while (iterator.hasNext()) {
        System.out.println(map.get(iterator.next()));
    }

    Set<Map.Entry<String, String>> set = map.entrySet();
    Iterator<Entry<String, String>> it = set.iterator();
    while (it.hasNext()) {
        Entry<String, String> entry = it.next();
        System.out.println(entry.getKey());
        System.out.println(entry.getValue());
    }
    for (Map.Entry<String, String> entry : map.entrySet()) {
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }

正则表达式:

public class Pettern {
/**
*
* 正则表达式
*/

public static void main(String[] args) {
    /**
     * 规则验证
     */
    String st = "123456";
    Pattern p = Pattern.compile("[0-9]{6}");
    Matcher m = p.matcher(st);
    boolean f = m.matches();
    System.out.println(f);
    /**
     * 匹配字符串
     */
    String s = "qwer1asf";
    boolean flag = s.matches("[a-z][a-zA-Z0-9]{7,15}");
    System.out.println(flag);

    String str = "1r2r3t4y";
    String[] arr = str.split("[a-z]");
    for (String temp : arr) {
        System.out.println(temp);
    }
    /**
     * 匹配替换
     */
    String re = str.replaceAll("[32]", "A");
    System.out.println(re);
}

}
io文件输入输出,流操作:

对象序列化:
定义:将对象某一时刻的状态保存到外部存储介质上(将序列化的对象读取出来叫反序列化)
功能:由于程序运行时的某个状态可以保存,可以很好地完成对象深克隆
实现方法:实现Serializable接口、Externalizable接口
public static void main(String[] args) throws IOException, ClassNotFoundException {
// 序列化
Employee employee = new Employee(null, 0, 0);
employee.setName("李建军");
employee.setAge(10);
employee.setSalary(20.30);
FileOutputStream fos = new FileOutputStream("io.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(employee);
// 反序列化
FileInputStream fis = new FileInputStream("io.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Employee e1 = (Employee) ois.readObject();
System.out.println(e1.getName());
}
反射: 在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象都能调用它的任意一个方法和属性;
这种动态获取信息以及动态调用对象的方法的功能称为反射机制
获取对象,然后调取方法
直接利用invoke()调用方法

自定义注解: @Target(value = { ElementType.TYPE }) 表示这个注解用在什么地方
@Retention(RetentionPolicy.RUNTIME)表示在运行的时候这个注解被运行
public enum ElementType{
TYPE, //类、接口(包括注释类型)或枚举声明
FIELD, //字段声明(包括枚举常量)
METHOD, //方法声明
PARAMETER, //参数声明
CONSTRUCTOR, //构造方法声明
LOCAL_VARIABLE, //局部变量声明
ANNOTATION_TYPE, //注释类型声明
PACKAGE //包声明
}
public enum RetentionPolicy {
SOURCE, /* Annotation信息仅存在于编译器处理期间,编译器处理完之后就没有该Annotation信息了 /
CLASS, /
编译器将Annotation存储于类对应的.Class文件中,默认行为 /
RUNTIME /
编译器将Annotation存储于Class文件中,并且可由JVM读入 */
}

例子:@Retention(RetentionPolicy.RUNTIME)
@Target(value = { ElementType.TYPE })
public @interface ActionAnnotation {

}
public @interface MethodAnnotation {
// 注解参数
public String path();

// 带默认值的注解参数
public String method() default "get";

}
@ActionAnnotation
public class AnnoDemo {
@MethodAnnotation(path = "test")
public void show() {
System.out.println("测试");
}
}
public class AnnoClassDemo {

public static void main(String[] args) {
    try {
        // 获取大Class对象
        Class<AnnoDemo> Clazz = (Class<AnnoDemo>) Class.forName("Anno.AnnoDemo");
        // 获取当前所有的注解
        Annotation[] annotations = Clazz.getAnnotations();
        // 遍历
        for (Annotation annotation : annotations) {
            System.out.println(annotation.annotationType().getName());
            // 判断注解名是否为指定注解
            if (annotation.annotationType().getName().equals("Anno.ActionAnnotation")) {
                AnnoDemo a = Clazz.newInstance();
                a.show();
            }
        }
        Method m = Clazz.getMethod("show");
        Annotation[] arr = m.getDeclaredAnnotations();
        for (Annotation temp : arr) {
            System.out.println(temp.annotationType().getName());
            if (temp.annotationType().getName().equals("Anno.MethodAnnotation")) {
                MethodAnnotation ma = (MethodAnnotation) temp;
                System.out.println(ma.path());
                System.out.println(ma.method());
            }
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    }
}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,631评论 18 399
  • 1.Java是一种强类型语言 在JAVA中,所有的数据类型所占的字节数量与平台无关。Java没有任何无符号(uns...
    qingshangwushi阅读 997评论 0 1
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,055评论 0 4
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,225评论 0 2
  • 一. Java基础部分.................................................
    wy_sure阅读 3,811评论 0 11