自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 JavaSE 泛型(泛型相关知识点总结)

目录一.泛型:1.集合中使用泛型:2.泛型的嵌套:3.总结:二.如何自定义泛型结构:1.泛型类:(1).继承中的泛型类:2.泛型方法:三.自定义泛型注意点:一.泛型:JDK5.0的新特性1.集合中使用泛型:2.泛型的嵌套:3.总结:集合接口或集合类在jdk5.0时都修改为带泛型的结构。在实例化集合类时,可以指明具体的泛型类型指明完以后,在集合类或集合中凡是定义类或接口时,内部结构 (方法,属性,构造器) 使用到类的位置,都指定为实例化的泛型类型。比如:add(E e) ---->

2020-06-30 17:04:14 126

原创 JavaSE 集合(Collections工具类)

这里写目录标题Collections的常用方法:1.reverse(List):2.shuffle(List):3.sort(List):4.sort(List,Comparator):5.swap(List,int,int):6.int frequency(Collection,Object):7.void copy(List dest,List src):8.synchronizedXxx()方法:二.面试题:Collections的常用方法:1.reverse(List):反转List中元素的顺

2020-06-30 11:30:21 268

原创 JavaSE 集合(Collection子接口之三:Map接口)

一.Map接口的框架:|----Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y=f(x),python中的字典 |-----HashMap:作为Map的主要实现类:线程不安全的,效率高:存储null的key和value |-----LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历; 原因:在原有的HashMap底层结构基础上,添加一对指针,指向前一个和后一个元素。 |-----TreeMap:保证按照添加的key-value对

2020-06-29 18:52:20 714

原创 JavaSE 集合(Collection子接口之二:Set接口)

一.Set接口的框架:|-----Collection接口:单列集合,用来存储一个一个的对象 |-------Set接口:存储无序的、不可重复的数据 ----> 高中的"集合" |--------HashSet:作为Set接口的主要实现类,线程不安全;可以存储null值 |--------LinkedHashSet:作为HashSet的子类,遍历其内部数据时,可以按照添加的顺序遍历 |--------TreeSet:可以按照添加的元素或者添加的对象指定进行排序。1.Set:存

2020-06-27 19:13:54 441

原创 JavaSE 集合(Collection子接口之一:List接口)

一.ArrayList、LinkedList、Vector三者的异同?同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据不同:ArrayList:作为List接口的主要实现类:线程不安全的,效率高:底层使用Object[]存储。LinkedList:对于频繁的插入、删除操作,使用效率比ArrayList高;底层使用到双向链表存储。Vector:作为List接口的古老实现类:线程安全的,效率低;底层使用Object[]存储。二.ArrayList的源码分析:1.jdk

2020-06-27 14:15:12 162

原创 JavaSE 集合(新特性foreach循环)

一.使用foreach循环遍历循环元素:JDK5.0新增了foreach循环,用于遍历集合、数组1.遍历集合将collection对象赋值给obj局部变量,然后输出;内部仍然调用了迭代器。2.遍历数组:二.笔试题:数组元素发生了改变;数组中的元素并未发生改变;因为foreach遍历是将arr数组中的值赋值给局部变量s;这里改变的是s的值。并不是数组元素。...

2020-06-26 15:45:44 134

原创 JavaSE 集合(Iterator迭代器)

一.迭代器的执行原理:while(iterator.hasNext()){ System.out.println(iterator.next());}刚开始指针指向123的上面1.hasnext():判断是否还有下一个元素:2.next():1.指针下移2.将下移以后集合位置上的元素返回3.整个的执行过程为:最开始指针在123的上面,通过hasNext()判断下一个元素是否为空,如果不为空返回true,然后调用next(),将指针下移,返回下移后的集合位置的元素值。以此类推。直

2020-06-26 14:01:15 166

原创 JavaSE 集合(Collection接口的常用方法)

一.Collection接口的常用方法:1.add(Object e):将元素e添加到集合coll中2.size():获取添加的元素的个数3.addAll(Collection coll):将coll集合中的元素添加到当前的集合中4.isEmpty():判断当前集合是否为空:5.clear():清空集合中的所有元素6.contains():判断当前集合中是否包含obj比较的是内容;像Collection接口的实现类添加数据时,要求obj所在类要重写equals()方

2020-06-25 23:38:04 398

原创 JavaSE 集合(框架概述)

一:集合框架概述:1.Collection接口继承树:2.Map接口继承树:|---------Collection接口,单列集合,用来存储一个一个对象 |--------------List接口:存储有序的、可重复的数据。 ----> “动态”数组 |--------------ArrayList、LinkedList、Vector |--------------Set接口:存储无序的、不可重复的数据 ----> 高中将的"集合" |---------------H

2020-06-25 19:23:05 149

原创 JavaSE 注解

一.JDK内置的三个注解注解是jdk 5.0 新增功能1.@Override限定重写父类的方法,该注解只能用于方法2.@Deprecated:用于表示所修饰的元素(类,方法)已过时。希望开发者用新的JDK中的结构。3.@SuppressWarnings抑制编译警告。在编译器中定义一个变量,但未使用它,会出现一个警告。当加上这个注解时候,这个警告变不会出现。二.自定义注解:1.注解申明为@interface2.内部定义成员,使用value表示3.可以指定成员的默认值,使用defa

2020-06-25 19:06:02 160

原创 JavaSE 枚举类

一.枚举类的使用:1.枚举类的理解:类和对象只有有限个,确定个,我们称此类为枚举类;2.当需要定义一组常量时,强烈建议使用枚举类3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。二.如何自定义枚举类:方式一:jdk5.0之前,自定义枚举类方式二:jdk5.0 可以使用enum关键字定义枚举类注:使用enum关键字定义枚举类不需要重写toString()方法,因为enum定义的枚举类继承了Enum类,Enum重写了toString()方法。三.Enum类中的主要方法:1.va

2020-06-24 19:19:12 333

原创 JavaSE 常用类(Java比较器)

一.说明:java中的对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 < 的方式。但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。如何实现?使用两个接口中的任何一个:Comparable 或 Comparator二.Comparable接口:(自然排序)Comparable接口的使用举例:自然排序1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法。给出了比较两个对象大小的方式2.像St

2020-06-24 17:26:18 213

原创 JavaSE 常用类(JDK8中的日期和时间的API)

JDK8中的日期和时间的API一.jdk8之前的API存在着一些问题:①可变性:像日期和时间这样的类应该是不可变的②偏移量:Date中的年份是从1990开始的,而月份都是从0开始的③格式化,格式化只对Date有用,Calendar则不行二.localDate、localTime、localDateTime方法:1.now():返回当前的时间2.of():设置指定的年月日时分秒。没有偏移量3.getXxx():4.不可变性:三.instant类:1.now()方法:2

2020-06-24 13:14:51 369

原创 JavaSE 常用类(JDK8之前日期时间的API)

一.Date类:JDK8之前的日期和时间的API测试:java.util.Date类 |-------java.sql.Date类1.两个构造器的使用:A.构造器一:Date():创建一个对应当前时间的Date对象。B.构造器二:创建指定毫秒数的Date对象。//构造器一:Date()Date date1 = new Date();System.out.println(date1.toString()); //Tue Jun 23 23:13:26 CST 2020Syste

2020-06-24 12:06:49 373

原创 JavaSE 常用类(StringBuffer与StringBuilder)

一.String、StringBuffer、StringBuilder三者的异同:String:不可变的字符序列;底层用char[]数组存储StringBuffer:可变的字符序列;线程安全的,效率偏低,底层用char[]数组存储。StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高一些,底层用char[]数组存储。三者执行的效率从高到低排列:StringBuilder > StringBuffer > String二.StringBuffer、St

2020-06-23 21:04:47 460

原创 JavaSE 常用类(String类与其他类型之间的转换)

一.String -> 基本数据类型、包装类String ----> 包装类、基本数据类型:调用包装类的静态方法:parseXxx(str)String str1 = "123";int num = Integer.parseInt(str1);将基本数据类型、包装类 --> String:调用String重载的valueOf(xxx):int num = 100;String str2 = String.valueOf(num) //"123"二.String类与ch

2020-06-23 18:12:09 138

原创 JavaSE 常用类(String类的常用方法)

String类的常用方法一:1.int length():返回字符串长度;2.char charAt(int index):返回某索引处的字符3.boolean isEmpty():判断是否是空字符串4.String toLowerCase():将String中的多有字符串转为小写;s1调用此方法,但s1本身并不改变。5.String toUpperCase():将String中的所有字符串转换为大写;6.trim():返回字符串的副本,忽略前导空白和尾部空白;7.bool

2020-06-23 16:27:44 643

原创 JavaSE 常用类(String类实例化的两种方式及内存结构)

String类:1.String的特性:1.String声明为final的,不可继承的;2.String实现了Serializable接口:表示字符串时支持序列化的;String实现了Comparable接口:表示String可以比较大小;3.String 内部定义了final char[] value 用于存储字符串数据;4.String:代表不可变的字符序列,简称不可变性;5.2.String类的内存实现:...

2020-06-23 10:41:29 252

原创 JavaSE 多线程(线程的常用方法)

线程常用方法:1.start():启动当前线程;调用当前线程的run();2.run():通常重写需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中。3.currentThread():静态方法,返回执行当前代码的线程。4.getName():获取当前线程的名字;5.setName():设置当前线程的名字6.yield():一旦执行此方法时候,释放当前CPU的执行在线程一为0时候。可以被20整除,CPU切换另一个线程。7.join():在线程A中调用线

2020-06-22 22:39:52 133

原创 JavaSE 多线程(线程的通信)

一:线程的通信:首先我们来看一个例子:使用两个线程打印1-100.线程1,线程2 交替打印此程序设计到三个方法:wait():一旦执行次方法,当前线程就进入阻塞状态,并释放同步监视器(锁)。notify():一旦执行此方法,就会唤醒wait的一个线程。如果多个线程被wait,就唤醒优先级高的线程。nodifyAll():一旦执行此方法,就会唤醒所有被wait的线程。说明:1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中。2.wa

2020-06-22 21:16:50 149

原创 JavaSE 多线程(死锁)

一:线程的生命周期:新建:当一个线程被创建的时候,新生的线程处于新建状态就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备运行条件,只是没分配到CPU资源。运行:当就绪的线程被调度并获得CPU资源时,边进入运行状态,run()方法定义了线程的操作和功能。阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让CPU临时终止自己的执行,进入阻塞状态。死亡:线程 完成它的全部工作、线程被提前强制性终止、出现异常导致结束。二:死锁:1.理解:①不同线程分别

2020-06-20 18:30:44 88

原创 Java SE 多线程(线程的同步)

线程的安全性首先我们来看一个例子:创建3个窗口卖票,总票数100张;运行结果为:1.**问题:**卖票过程中出现了重票、错票 -----> 出现了的安全问题2.**原因:**当某个线程来操作车票的过程中,尚未操作完成时,其他线程参与过来,因为操作车票。3.**解决:**当一个线程a在操作ticket的时候,其他线程不能参与进来。直到线程a操作完ticket的时候,其他线程才可以操作ticket。这种情况即使线程a出现了阻塞,也不能被改变。在java 中通过使用同步机制解决线程安全问题

2020-06-20 14:43:36 111

原创 JavaSE 多线程(线程的4种创建方式)

一:线程创建的方式一:继承Thread类1.创建一个继承于Thread类的子类2.重写Thread类的run() —> 将此线程执行的操作声明在run()方法中3.创建Thread类的子类对象4.通过此对象调用start()例子:遍历100以内的偶数可以看出有两个线程在即MyThread线程 与 main线程注:**问题一:**我们不能通过直接调用run()方法启动线程。**问题二:**在启动一个线程,遍历100以内的偶数,不可以还让已经start()的线程去执行。会报

2020-06-20 00:17:12 251

原创 JavaSE 异常处理

一:异常的体系结构:java.lang.Throwablejava.lang.Error:一般不会编写针对性的代码进行处理。java.lang.Exception:可以进行异常的处理。A.编译时异常(checked)|------->IOException|-------------->FileNotFoundException|-------->ClassNotFoundExceptionB.运行时异常(unchecked)|------->NullPointer

2020-06-19 13:00:46 162

原创 JavSE OOP(面向对象)内部类与代码块

内部类:1.概念:java中允许将一个类A声明在另一个类B中,则类A是就是内部类,类B就是外部类。2.分类:①成员内部类②局部内部类(方法内,代码块内,构造器内)class Person{ //静态成员内部类 static class Heart{ public void show(){ System.put.println("心脏跳动"); } } //非静态成员内部类 class Brain{ public void ifno(){ System.out

2020-06-12 23:27:35 1014

原创 JavaSE OOP(面向对象)interface 接口

接口(interface):接口的存在是为了弥补Java不支持多重继承,有了接口,就可以得到多重继承的效果。实现一个父类的接口也可以实现多个接口1.接口的使用:1.接口使用interface定义2.Java中,接口和类是并列的两个结构3.如何定义接口:定义接口中的成员。3.1 JDK7及以前:只能定义全局变量和抽象方法全局变量:public static final的,但是书写是可以省略不写。抽象方法:public abstract的public class InterfaceTe

2020-06-11 22:07:20 150

原创 JavaSE OOP(面向对象)abstract抽象

abstract1.abstract:抽象的2.abstract:可以用来修饰的结构:类、方法;3.abstract修饰类:抽象类1.此类不能实例化2.抽象类中一定有构造器,便于子类实例化时调用(涉及:子类实例化的全过程)3.开发中,都会提供抽象类的子类,让子类实例化,完成相关的操作。4. abstract修饰方法:抽象方法1.抽象方法只有声明、没有方法体2.包含抽象方法的类,一定是抽象类。反之,抽象类中可以没有抽象方法。3.若子类重写了父类的抽象方法后,此子类方可实例化。若子类没有重

2020-06-11 17:04:20 157

原创 JavaSE OOP(面向对象)static、final关键字

static关键字:1.static:静态的2.static可以修饰:属性、方法、代码块、内部类3.使用static修饰属性:静态变量3.1属性:按是否使用static修饰,又分为:静态属性和非静态属性(实例变量)实例变量:我们创建了类的多个对象,每个对象独立的拥有一套类中的非 静态属性,当修改其中的一个非静态属性时,不会导致其他属性的修改。静态变量:我们创建了类的多个变量,多个对象共享同一个静态变量,当通过某一个对象去修改同一个静态变量时,会导致其他的静态变量值是修改过的。此处仍然使用尚硅

2020-06-11 15:08:33 174

原创 JavaSE 包装类知识点总结

1.为什么要有包装类(或封装类)为了使基本数据类型的变量具有类的特征,引入包装类。2.基本数据类型与对应的包装类:byte --> Byteshort --> Shortint --> Integerlong --> Longfloat --> Floatdouble --> Double以上父类为Numberboolean --> Booleanchar --> Character3.基本数据类型与包装类之间的相互转换:基本数据

2020-06-11 13:12:50 177

原创 JavaSE == 与 equals

一、== 的使用:== : 运算符1:可以在基本数据类型变量和引用数据类型变量中;2:如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同);3.如果比较的是引用数据类型变量:比较的两个对象的地址值是否相同,即两个引用是否指向同一个对象实体;二、equals方法的使用:1.是一个方法,而非运算符2.只能够适用于引用数据类型//具体的代码不写了,只展示以下代码段Customer cust1 = new Customer("Tom",21);Customer cu

2020-06-11 12:12:13 103

原创 Java SE instanceof关键字

一:向下转型我们首先来看为什么要用instanceof关键字有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类的属性和方法。子类特有的属性和方法不能调用。所以就有了向下转型,通过使用强制类型进行转换。public class InstanceofTest { public static void main(String[] args) { Person p1 = new Man(); Woman w1 = (Wom

2020-06-10 23:54:49 231 1

原创 Java SE OOP(面向对象)多态

多态:面向对象特征之三:多态一:理解多态性:可以理解为一个事务的多种形态。二:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类)三:多态的使用:虚拟方法调用有了对象的多态以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。总结:编译看左边,运行看右边class Person{ //相关属性和方法 public void eat(){ //.... }}class Man extends Person{ //相关属性和方法

2020-06-10 19:21:09 102

原创 Java SE OOP(面向对象)继承

继承继承:面向对象三大特征之二:继承的好处:1.减少代码的冗余,提高代码的复用性2.便于功能的拓展3.为之后的多态性提供了前提。

2020-06-10 18:12:04 85

原创 JavaSE OOP(面向对象)封装

封装:封装:面向对象三大特征之一:将事务封装成一个类,减少耦合,隐藏细节,保留特定的接口与外界联系,当接口发生改变时,不会影响外部调用。关于封装:封装主要是为了增加程序的可读性,解耦合,并且隐藏部分实现细节。案例:public class Test { public static void main(String[] args) { Student student = new Student(); student.name = "小明";

2020-06-10 12:30:34 137

原创 JavaSE this与super

this关键字:一:this修饰属性和方法如果方法的形参和类的属性同名时,我们必须显式的使用this.变量方式,表明变量是属性,而非形参。 public void setName(String name) { this.name = name; //将传过来的参数name 赋值给当前对象的属性name }二:this调用构造器首先看下为什么需要在构造器中使用this。先来看下面的代码: //构造器 public Person3() { System.out.println

2020-06-10 11:37:32 121

原创 JavaSE 权限修饰符

四种权限修饰符1.Java规定的4种权限(从小到大):private、缺省、protected、public2.四种权限可以用来修饰类及类的内部结构:属性,方法,构造器,内部类修饰类的话,只能使用:缺省、public,内部类可以用private附上自己一到错题 呜呜呜...

2020-06-10 09:47:02 191

原创 JavaSE OOP(面向对象)重载与重写

重载1.重载的概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。总结:“两同一不同” 类名,方法名相同;形参列表不同(形参个数不同,形参类型不同)2.JDK5.0新特性:可变个数形参格式:数据类型…参数1.可变个数形参的格式 数据类型…变量名2.当调用可变个数的参数的方法时,传入的参数个数可以是0个,1个,2个…多个。3.可变个数形参的方法与本类中方法名相同,形参不同的方法类中构成重载。 public void show(String s){

2020-06-09 23:03:43 338

原创 二叉排序树(添加结点)

二叉排序树描述添加的结点的值小于父节点的值,放在父节点的左边,反之放在父节点的右边。a.如果父节点无子结点,将子结点的值与父节点的值进行比较后放到相应的位置。b.如果父节点有子结点,则将父节点的子结点看成父节点继续执行添加操作。创建二叉树排序树要创建二叉树必然要创建结点,创建的第一个结点为根结点。属性root方法add(Node node)//添加结点infixOrder()...

2020-06-09 22:10:23 3550

原创 OOP(面向对象)对象内存解析

对象的内存解析Person p1 = new Pserson();p1.name = "Tom";p1.isMale = true;Person p2 = new Person();Person p3 = p1;p3.age = 10;以下图片均参考尚硅谷宋红康版讲解的java第一行代码解析:new Person(),只要是new的结构都在堆中,则在堆中开辟一个空间地址为0x12ab,而后在栈空间中声明一个变量p1,因为p1在main方法中,方法中的变量都是局部变量,栈中存放的是p1的

2020-06-09 22:09:11 211

原创 JavaSE OOP(面向对象)学习入门

OOP学习入门面向对象学习的三大主线一:java类及类的成员:属性、方法、构造器、代码块、内部类二:面向对象的三大特征:封装、继承、多态三:其他关键字:this、super、static、final、abstract、interface、package、import以后会逐一总结,这次先总结第一个大块内容1.类和对象:对一个事务的描述,是抽象的,概念上的定义。即:具有相同属性和行为的对象的总称。对象:实际存在的该类的每个个体,因而也称为实例。万事万物皆对象(注:其实类也是对象,不过类是C

2020-06-09 21:32:05 166

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除