![](https://img-blog.csdnimg.cn/20210328105237528.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础
文章平均质量分 54
学习记录
菜鸟小杰
只要学不死,就往死里学!!!
展开
-
Java数据类型
Java数据类型1.数据类型思维导图从上图我们可以看出,Java的数据类型可以分为两大类:分别为基本数据类型和引用数据类型。基本数据类型共有八种:整数型4种,浮点型2种,字符型1种,布尔型1种。整数型byte:一个字节,8位,取值范围-27 ~ +27-1。short:两个字节,16位,取值范围-215 ~ +215-1。int:四个字节,32位,取值范围-231 ~ +231-1。long:八个字节,64位,取值范围-263 ~ +263-1。注意:byte,short,int默认值都是原创 2021-01-21 23:37:16 · 2166 阅读 · 5 评论 -
Java自动和强制类型转换
Java自动和强制类型转换自动类型转换可以直接将一个小的数据类型直接赋值给大的数据类型。(自动类型转换) int a=100,b; byte c=100,d; b=c;//自动类型转换,小的数据类型可以直接赋值给大的数据类型// d=a;//报错,一个大的数据类型直接赋值给小的数据类型,不能直接转换强制类型转换不能(直接)把一个大的数据类型直接赋值给小的数据类型 。比如int32位,byte8位。byte存不下32位,最大只能存8位,所以原创 2021-10-23 13:54:15 · 141 阅读 · 0 评论 -
基本数据类型的封装类及自动装拆箱
基本数据类型的封装类及自动装拆箱1.基本数据类型的封装类基本数据类型封装类原创 2021-01-22 03:03:25 · 324 阅读 · 1 评论 -
深入了解String类及字符串拼接问题
String类1.String概述String 类代表字符串。Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。用双引号表示。字符串是常量;它们的值在创建之后不能更改。2.String源码分析//被final修饰不可被继承public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used原创 2021-01-22 12:32:01 · 1438 阅读 · 3 评论 -
String和StringBuffer和StringBuilder的区别及扩容
string和stringBuffer和stringbuilder的区别及扩容1.String类我前面写了一篇文章详细介绍了String,这里就不再赘述了。感兴趣的小伙伴可以点击此链接String详解2.StringBuffer类StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序原创 2021-01-22 22:59:22 · 266 阅读 · 1 评论 -
break与continue
break与continue1、break:跳出一个循环体。2、continue:跳过本次循环中剩下尚未执行的语句,立即进入下一次循环。案例分析案例一public class Test { public static void main(String[] args) { for(int i=0; i<12; i++){ if(i==5){ break; } Syst原创 2021-10-21 23:45:03 · 47 阅读 · 0 评论 -
switch
switchswitch:从匹配到的case起,一直执行完。如果没匹配到case,则执行default。如果遇到break,退出switch 。举例public class demo { public static void main(String[] args) { fun1("a");//遇到break,退出switch System.out.println("=================="); fun2("a");//从匹配到的ca原创 2021-10-22 00:08:11 · 82 阅读 · 0 评论 -
Java 循环
Java 循环while循环while(循环条件) // 循环条件,条件为真进入{ 循环操作语句;}do-while循环do-while循环,至少循环一次do{ 循环操作;}while(循环条件); // 循环条件,条件为真继续循环三、for循环一般for循环for(表达式1;表达式2;表达式3)//其中,表示式皆可以省略,但“;”不可省略.{ 语句;}遍历数组 /* 建立一个数组 */ int[] integers = {1,原创 2021-10-23 21:50:28 · 157 阅读 · 0 评论 -
Iterator迭代器
Iterator迭代器Iterator接口定义了以下四种方法。方法作用boolean hasNext()如果集合还没遍历完就返回true。Object next()返回集合里的下一个元素。void remove()删除集合里上一次next方法返回的元素。void forEachRemaining(Consumer action)这是java8新增的默认方法,可用Lambda表达式遍历数组。一、使用迭代器遍历元素时不能不能通过Collection接口中的原创 2021-10-23 21:29:41 · 65 阅读 · 0 评论 -
循环删除集合元素的那些坑
循环删除集合元素的那些坑1、for循环遍历listfor(int i=0;i<list.size();i++){ if(list.get(i).equals("del")) list.remove(i);}这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,**所以会导致你在遍历的时候漏掉某些元素。**比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。2、增强for循环f原创 2021-10-23 21:40:36 · 294 阅读 · 0 评论 -
关键字static
关键字static1. 静态变量静态变量:⼜称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接 通过类名来访问它。静态变量在内存中只存在⼀份。实例变量:每创建⼀个实例就会产⽣⼀个实例变量,它与该实例同⽣共死。public class A { private int x; // 实例变量 private static int y; // 静态变量}2. 静态⽅法静态⽅法在类加载的时候就存在了,它不依赖于任何实例。所以静态⽅法必须有实现,也就是说它不能 是抽象⽅法。原创 2021-10-21 22:00:02 · 61 阅读 · 0 评论 -
关键字final
关键字final数据声明数据为常量,可以是编译时常量,也可以是在运⾏时被初始化后不能被改变的常量。对于基本类型,final 使数值不变;对于引⽤类型,final 使引⽤不变,也就不能引⽤其它对象,但是被引⽤的对象本身是可以修改的。final int x = 1;// x = 2; // cannot assign value to final variable 'x'final A y = new A();y.a = 1;⽅法声明⽅法不能被⼦类重写。private原创 2021-10-21 22:03:31 · 40 阅读 · 0 评论 -
关键字super
关键字super访问⽗类的构造函数:可以使⽤ super() 函数访问⽗类的构造函数,从⽽委托⽗类完成⼀些初始化的⼯作。应该注意到,⼦类⼀定会调⽤⽗类的构造函数来完成初始化⼯作,⼀般是调⽤⽗类的默认构造函数,如果⼦类需要调⽤⽗类其它构造函数,那么就可以使⽤ super() 函数。访问⽗类的成员:如果⼦类重写了⽗类的某个⽅法,可以通过使⽤ super 关键字来引⽤⽗类的⽅法实现。//public class SuperExample { protected int x; protected i原创 2021-10-21 21:33:52 · 45 阅读 · 0 评论 -
类的初始化顺序
类的初始化顺序将一个类加载到Java虚拟机中需要经历三个阶段:加载->链接(验证、准备,解析)->初始化。加载:这是由类加载器(ClassLoader)执行的。通过一个类的全限定名来获取其定义的二进制字节流(Class字节码),将这个字节流所代表的静态存储结构转化为方法区的运行时数据接口,根据字节码在java堆中生成一个代表这个类的java.lang.Class对象。链接:2.1.验证:验证Class文件中的字节流包含的信息是否符合当前虚拟机的要求。2.2.准备:为静态域分配存储空间原创 2021-10-21 21:52:00 · 1942 阅读 · 0 评论 -
权限修饰符
权限修饰符private:(同一个类中使用)。在不同类中即使在外部创建对象,仍然不可以通过对象访问私有权限的成员。缺省(default):(同一个包中使用)。被default所修饰的成员、可以在同一package中的所有类访问到。protected:(同一个**包中或不同包的子类中**可以使用)。被protected所修饰的成员、可以在同一package中的所有类访问到。同时,可以在不同包下的子类中使用public:(同一个工程中使用)可以在任何类中都能被访问到。...原创 2021-10-21 21:28:59 · 78 阅读 · 0 评论 -
接口和抽象类
接口和抽象类:具体类——抽象类——接口:越来越抽象,内部实现的东西越来越少抽象类抽象类为复用而生:专门作为基类来使用,也具有解耦的功能。抽象类是未完全实现逻辑的类(可以有字段和和具体方法,他们代表了 “具体逻辑”)抽象类封装**的是确定的,开放的是不确定的**,推迟到合适的子类中去实现。抽象类和抽象⽅法都使⽤ abstract 关键字进⾏声明。如果⼀个类中包含抽象⽅法,那么这个类必须声明为抽象类。抽象类和普通类最⼤的区别是,抽象类不能被实例化,只能被继承。接⼝接口是完全未实现逻原创 2021-10-21 21:35:40 · 59 阅读 · 0 评论 -
equals()和hashCode()的区别和联系
==基本数据类型:比较的是他们的值。引用数据类型:比较的就是地址值是否相同equals public boolean equals(Object obj) { return (this == obj); }Object类中定义了一个equals的方法,通过源码我们可以看到,其实它本质上还是==,通常我们需要重写equals(),使它比较对象内容是否相等。例如:String、Integer、Date等类就重写了equals()。hashCode同一个对象调用超过一原创 2021-01-25 00:17:21 · 121 阅读 · 0 评论 -
深拷贝和浅拷贝
深拷贝和浅拷贝cloneableclone() 是 Object 的 protected ⽅法,⼀个类不显式去重写 clone(),其它类就不能直接去调⽤该类实例的 clone() ⽅法。public class CloneExample { private int a; private int b; }CloneExample e1 = new CloneExample();// CloneExample e2 = e1.clone(); // 'clone()' has protecte原创 2021-10-21 21:30:23 · 229 阅读 · 0 评论 -
ArrayList
ArrayList底层是Object数组,是一个动态数组,其容量能自动增长。是线程不安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类。查询速度快(底层是数组可按照索引获得元素),增删速度慢(添加、删除时该元素后面的所有元素都要移动,所以添加/删除数据效率不高)。下面我们来分析ArrayList的源原创 2021-10-23 23:19:07 · 51 阅读 · 0 评论 -
LinkedList
LinkedList底层是双向循环链表,在此链表上每一个数据节点都由三部分组成:前指针(指向它前一个元素),数据,后指针(指向它后一个元素)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。查询效率低(无法按照索引获得元素,因此查询效率不高),增删效率高(只需要挪动对应的指针)。没有固定容量,不需要扩容;需要更多的内存,每一个数据节点除了存放数据,还要存放它的前指针,和后指针。下面我们来分析LinkedList的源码:属性 transient int size = 0;//原创 2021-10-23 23:29:01 · 130 阅读 · 0 评论 -
HashMap
HashMap底层是数组+链表+红黑树它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。HashMapHashMap的key不能重复,只允许一个为null。value可以重复,允许多个null。HashMap非线程安全,如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。下面我们一起来分析源码属性原创 2021-10-23 23:33:48 · 150 阅读 · 0 评论 -
LinkedHashMap
LinkedHashMapLinkedHashMap继承HashMap,其结构与HashMap相似它保证了元素迭代的顺序。该迭代顺序可以是插入顺序或者是访问顺序。我们知道HashMap有一个问题,就是它的遍历顺序是不确定的。但是有些场景,我们需要一个有序的Map。为解决这一问题,LinkedHashMap诞生了。它通过维护一个运行于所有条目的双向链表,虽然增加了时间和空间上的开销,但是保证了元素迭代的顺序。该迭代顺序可以是插入顺序或者是访问顺序。源码分析LinkedHashMap继承HashM原创 2021-10-23 23:36:44 · 1037 阅读 · 0 评论 -
HashSet
HashSet用HashMap作为数据存储,所有元素都存放在HashMap的key上面,定义一个虚拟的 Object 对象PRESENT 作为 HashMap 的 value 。HashMap最多只允许一个key为null,所以HashSet的元素可以为 NULL。HashMap无序,线程不安全,所以HashSet也是无序,线程不安全的。源码分析属性 private transient HashMap<E,Object> map; private static fi原创 2021-10-23 23:41:20 · 122 阅读 · 0 评论 -
LinkedHashSet
LinkedHashSet基于LinkedHashMap实现。用LinkedHashMap作为数据存储,保证了元素迭代的顺序,即插入顺序。继承 HashSet,其内部只定义spliterator()方法。可以直接调用父类HashSet的方法。LinkedHashSet只能实现插入顺序,不能实现访问顺序。源码分析LinkedHashSet继承HashSetpublic class LinkedHashSet<E> extends HashSet<E> i原创 2021-10-23 23:44:44 · 178 阅读 · 0 评论 -
集合常用方法
集合常用方法Collection接口的常用方法:add(T t) //添加指定元素 remove(T t) //删除指定元素 contains(T t) //是否包含某元素size() //获得元素的个数 toArray()方法将集合转换为Object数组toArray(T[] a)方法将集合转换为相应类型的数组iterator() //获得迭代器(Iterator类型),一般用于遍历 isEmpty() //集合是否为空 以下演示对Collection的操作方法 Co原创 2021-10-25 07:23:34 · 219 阅读 · 0 评论 -
Java注解
注解什么是注解?Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。注解的用处生成文档。这是最常见的,也是java 最早提供的注解。常用的有@param @return 等跟踪代码依赖性,实现替代配置文件功能。比如Dagger 2 依赖注入,未来java 开发,将大量注解配置,具有很大用处;在编译时进行格式检查。如@override原创 2021-10-20 23:00:27 · 65 阅读 · 0 评论 -
Java枚举
枚举第一种:不带属性的枚举(作用:常量,switch判断)enum Day { //实例之间,用逗号隔开。 MONDAY, TUESDAY, THIRSDAY, FORTHDAY, FRIDAY}public class EnumInner { public static void main(String[] args) { // 作为常量使用 //所有的枚举都会自动继承java.lang.Enum抽象类。这里面有定义了name()方法并重原创 2021-10-20 22:37:23 · 185 阅读 · 0 评论 -
Java泛型
泛型一个被举了无数次的例子:List arrayList = new ArrayList();arrayList.add("aaaa");arrayList.add(100);for(int i = 0; i< arrayList.size();i++){ String item = (String)arrayList.get(i);//此处会抛出ClassCastException Log.d("泛型测试","item = " + item);}我们将第一行声明初始原创 2021-10-20 21:47:54 · 53 阅读 · 0 评论 -
Java异常
异常任何可以作为异常抛出的类,分为两种: Error和 Exception。其中 Error ⽤来表示 JVM ⽆法处理的错误,Exception 分为两种:非运行时异常(受检异常) :Exception中除RuntimeException极其子类之外的异常。编译器会检查此类异常,如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。运行时异常(非受检异常) :RuntimeException类极其子原创 2021-10-20 22:58:54 · 31 阅读 · 0 评论