![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础
Java基础的学习
wushaoji321
这个作者很懒,什么都没留下…
展开
-
IDEA文件多层文件夹以xx.xx.xx的形式创建怎么展开成子文件夹
IDEA文件多层文件夹以xx.xx.xx的形式创建怎么展开成子文件夹最近在练习项目的时候发现,以xx.xx.xx的形式创建多层文件夹不会展开,如图找了许多资料也没说到点子上,都在说快捷键。经过一番摸索发现只需要点击项目右上角的齿轮将Compact Middle packages 前面的√ 取消即可展开子文件夹如图点击右侧齿轮将Compact Middle packages 前面的√ 取消over...原创 2020-07-31 11:44:59 · 4422 阅读 · 4 评论 -
开发中应该怎么解决线程安全问题?
聊一聊,开发中应该怎么解决线程安全问题?是一上来就选择线程同步吗? synchronized不是,synchronized会让程序的执行效率降低,用户体验不好。系统的用户吞吐量降低。用户体验差。在不得已的情况下再选择线程同步机制。第一种方案:尽量使用局部变量代替"实例变量和静态变量”。第二种方案:如果必须是实例变量,那么可以考虑创建多个对象,这样实例变量的内存就不共享了.(一个线程对应1个对象,100个线程对应100个对象,对象不共享,就没有数据安全问题了. )第三种方案:如果不能使用局部变原创 2020-07-23 22:09:04 · 188 阅读 · 0 评论 -
Java final修饰的成员变量的赋值时机详解及static修饰延伸
final修饰的成员变量只能在对象创建之前或者通过构造器赋值。常用的赋值途径:默认初始化显式赋值代码块赋值构造器赋值通过 .属性或 .方法赋值但是,由于final修饰的成员变量在底层设计时,不允许默认初始化赋值,所以,赋值方法只剩下 :①显式赋值、②代码块赋值和③构造器赋值。具体为什么不允许默认初始化,转见Java final修饰的成员变量有默认值吗?我们可以再延伸一下,假如是static final修饰的成员变量static final修饰的成员变量赋值时机:我们知道static原创 2020-07-11 16:02:53 · 1018 阅读 · 1 评论 -
Java final修饰的成员变量有默认值吗?
class Something { final int i; public void doSomething() { System.out.println("i = " + i); }}上边有问题吗?答案: 有问题。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int转载 2020-07-11 15:44:11 · 1153 阅读 · 1 评论 -
Java为什么静态方法不可以被覆盖
覆盖(override)是在继承+多态的前提下的概念。Java中的静态方法不多态,所以不涉及覆盖,无论静态方法是在基类还是派生类上。从结果看,JVM中有4条invoke-*指令:invokevirtual、invokeinterface、invokestatic、invokespecial,其中前两条指令有多态语义而后两条没有。静态方法是用invokestatic来调用的,编译的时候就确定好具体用那个版本的方法了。private的成员方法是用invokespecial调用的,同样不多态。被调用的变量是接转载 2020-07-10 16:46:55 · 1116 阅读 · 0 评论 -
Java怎么理解构造器不能被继承
编译器如果要构造一个类,必须要有和类名字相同的构造函数才可以。也就是说,构造函数是用来造唯一的东西的。不能用一个构造函数即造爸爸,又造儿子。参考文献转载 2020-07-10 16:35:07 · 968 阅读 · 0 评论 -
Java集合之字典(Map)学习总结
Map接口Map与Collection并列存在。用于保存具有映射关系的数据:key-value Map中的key和value都可以是任何引用类型的数据 Map中的key用set来存放,不允许重复,即同一个Map对象所对应的类,须重写 hashCode()和 equals()方法 常用 String类作为Map的“键” key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的value Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和原创 2020-07-09 08:49:08 · 2014 阅读 · 0 评论 -
Java集合之Set学习笔记
Collection子接口:Set接口概述Set接口是Collection的子接口,set接口没有提供额外的方法 Set集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set集合中,则添加操作失败。(多用于过滤操作,去掉重复数据) Set判断两个对象是否相同不是使用==运算符,而是根据equals()方法1.存储的数据特点:用于存放无序的、不可重复的元素以HashSet为例说明:无序性:不等于随机性。存储的数据在底层数组中并非照数组索引的顺序添加,而是根据数据的哈希值决定的。原创 2020-07-08 11:37:40 · 161 阅读 · 0 评论 -
Java集合之列表(List)学习笔记
Collection子接口:List接口1. 存储的数据特点:存储序有序的、可重复的数据。鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组 List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。 List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。 JDK AP中List接口的实现类常用的有:ArrayList、LinkedList和 Vector.2. 常用方法:List除了从 Collection集原创 2020-07-08 11:35:58 · 239 阅读 · 0 评论 -
Java集合的学习总结
集合的分类Java集合可分为Collection和Map两种体系Collection接口:单列数据,定义了存取一组对象的方法的集合 List:元素有序、可重复的集合 Set:元素无序、不可重复的集 Map接口:双列数据,保存具有映射关系“key-value对”的集合集合的框架结构|----Collection接口:单列集合,用来存储一个一个的对象 |----List接口:存储有序的、可重复的数据。 -->“动态”数组 |----ArrayL原创 2020-07-08 11:33:46 · 82 阅读 · 0 评论 -
Java数组与集合的优缺点比较
集合与数组1. 集合与数组存储数据概述:集合、数组都是对多个数据进行存储操作的结构,简称Java容器。 说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中)2. 数组存储的特点:一旦初始化以后,其长度就确定了。 数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了。比如:String[] arr;int[] arr1;Object[] arr2;3. 数组存储的弊端:一旦初始化以后,其长度就不可修改。 数原创 2020-07-08 11:28:33 · 2930 阅读 · 0 评论 -
Java线程的生命周期详解
Thread的生命周期线程的五种状态:新建:当一个 Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态 就绪:处于新建状态的线程被star()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义了线程的操作和功能 阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CP∪并临时中止自己的执行,进入阻塞状态 死亡:线程完成了它的全部工作或线程被提前强制性地原创 2020-07-08 11:22:39 · 140 阅读 · 0 评论 -
Java的多线程同步机制总结
方式一:同步代码块synchronized(同步监视器){//同步监视器就是需要同步线程的公共对象 //需要被同步的代码 }说明:操作共享数据的代码,即为需要被同步的代码。 -->不能包含代码多了,也不能包含代码少了。 共享数据:多个线程共同操作的变量。比如:ticket就是共享数据。 同步监视器,俗称:锁。任何一个类的对象,都可以充当锁。 要求多个线程必须要共用同一把锁。 在实现Runnable接口创建多线程的方式中,我们可以考虑使用this充当同步监视器。原创 2020-07-08 11:21:14 · 146 阅读 · 0 评论 -
Java线程创建的四种方式
方式一 继承Thread类的方式:创建一个继承于Thread类的子类 重写Thread类的run() --> 将此线程执行的操作声明在run()中 创建Thread类的子类的对象 通过此对象调用start():①启动当前线程 ② 调用当前线程的run()注意点:我们启动一个线程,必须调用start(),不能调用run()的方式启动线程。 如果再启动一个线程,必须重新创建一个Thread子类的对象,调用此对象的start().(注意后面的点) 如果自己手动调用run()方法,那么就只.原创 2020-07-08 11:17:20 · 99 阅读 · 0 评论 -
Java单例模式的实现
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。饿汉式:class Bank{ //1.私化类的构造器 private Bank(){ } //2.内部创建类的对象 //4.要求此对象也必须声明为静态的 private static Bank instance = new Bank(); //3.提供公共的静态的方法,返回类的对象 public static Bank getInstance(){ return in原创 2020-07-08 11:12:05 · 104 阅读 · 0 评论 -
Java面向对象-封装、继承和多态学习笔记
一、面向对象特征之封装性1. 为什么要引入封装性?我们程序设计追求“高内聚,低耦合” 高内聚:类的内部数据操作细节自己完成,不允许外部干涉 低耦合:仅对外暴露少量的方法用于使用。 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露岀来。这就是封装性的设计思想。2. 问题引入:当我们创建一个类的对象以后,我们可以通过"对象.属性"的方式,对对象的属性进行赋值。这里,赋值操作要受到属性的数据类原创 2020-07-08 11:05:43 · 324 阅读 · 0 评论 -
Java的异常处理-学习笔记
异常的定义异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。 (开发过程中的语法错误和逻辑错误不是异常)1. 异常的体系结构Java程序在执行过程中所发生的异常事件可分为两类:Error: Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如: StackOverflowError和OOM。一般不编写针对性的代码进行处理。 Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如: 空指针访问原创 2020-07-08 10:57:48 · 135 阅读 · 0 评论 -
为什么IDEA和Eclipse自动生成的hashcode()值通常是乘31
为什么IDEA和Eclipse自动生成的hashcode()值通常是乘31① 乘一个较大的数可以放大数与数之间的差别,但较大的乘数会导致溢出;② 31只占用5bits,相乘造成数据溢出的几率较小;③ 31可以由i*31 ==(i<<5)-i来表示,现在虚拟机里面都有做相关优化(提高运算效率);④ 31本身是个素数,素数的作用就是如果我用一个素数乘以一个数,那么最终出来的结果只能被素数和被乘数还有1来整除(减少冲突)....原创 2020-07-04 09:05:32 · 520 阅读 · 0 评论 -
源码解析+代码演示:为什么使用StringBuffer和StringBuilder类型对字符串进行操作,内存地址不会变
源码解析:为什么使用StringBuffer和StringBuilder类型对字符串进行操作,内存地址不会变 1. 源码解析 2. 代码演示源码解析直接上源码(以append操作为例),咱们一行行来看![在这里插入图片描述](https://img-blog.csdnimg.cn/20200702115305283.png)这里先确定了输入的char[]数组的长度( int len = str.length;)并根据长度使用ensureCapacityInternal()方法创建了一个新的扩原创 2020-07-02 12:11:46 · 459 阅读 · 1 评论 -
eclipse单元测试的添加详解和在开发中的使用
eclipse单元测试的添加详解和在开发中的使用eclipse中单元测试的添加和使用开发中单元测试的使用eclipse中单元测试的添加首先在我们所要进行测试的项目(prpject)上右击,选择Build Path:然后选择Configure Build Path,会出现如下对话框,下一步点击菜单栏的LIbraries,然后点击右侧的Add Libraries:选择JUnit,点击Next:选择JUnit的版本,点击Finish,点击apply and close新建一个myTe原创 2020-06-27 10:02:52 · 578 阅读 · 0 评论 -
Eclipse-Debug中Step Into无效?
Eclipse-Debug中Step Into无效?使用Eclipse的Debug功能时发现,Step Into 并没有进入代码内部,而是直接下一步了(类似Step Over)。如何解决?首先:右键,点击Debug configurations…然后在搜索框右边点击JRE,检查Alternate JRE:是否为安装时的JDK中的JRE,如果不是修改即可。点击Alternate JRE,点击Install JREs…remove现有的JREadd–Standard VM --Next原创 2020-06-25 21:44:08 · 275 阅读 · 1 评论 -
Eclipse为什么输入中文是繁体?快捷键惹的祸
Eclipse为什么输入中文是繁体?快捷键惹的祸这是因为Eclipse格式化代码的快捷键ctrl+shift+F,与搜狗输入法的繁/简切换冲突了。只需要关闭搜狗输入法的繁/简切换快捷键就好。如图,鼠标右边点击搜狗输入法点击属性设置—高级----系统功能快捷键关闭繁/简切换...原创 2020-06-25 11:22:09 · 455 阅读 · 0 评论 -
Java调用方法无效?---方法形参的值传递机制
Java调用方法无效?—形参的值传递机制方法形参的传递机制:值传递(1)如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。(2)如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。示例:class Test{ public static void main(String[] args) { int a = 1; int b = 2; Test test = new Test(); test.changeOrder(a, b); System.ou原创 2020-06-24 08:54:26 · 629 阅读 · 0 评论 -
Java的局部变量与成员变量之间的异同
Java的局部变量与成员变量之间的异同相同点:命名规则一样,都是 类型+变量名 = value;都需要先声明后使用;都有其作用域。不同点:作用域不同;成员变量有特定的权限修饰符,局部变量没有;成员变量有默认初始化值而局部变量没有;加载位置不同,局部变量加载在栈中。而非静态成员变量加载到堆中,静态成员变量加载到方法区中。...原创 2020-06-23 09:38:54 · 153 阅读 · 0 评论 -
Java查找之线性查找和二分查找的比较与代码实现
Java查找之线性查找和二分查找的比较与实现1. 线性查找与二分查找的比较 2. 线性查找与二分查找的代码实现线性查找与二分查找的比较:1. 线性查找相比于二分查找简单,且适用范围更大;2. 二分查找速度快,但是要求查找对象是有序排列的。 线性查找与二分查找的代码实现:线性查找:import java.util.Scanner;public class Test { public static void main(String[] args) { // 创建数组并赋值 Syst原创 2020-06-23 09:31:19 · 227 阅读 · 0 评论 -
Java冒泡排序代码实现
Java冒泡排序代码实现将一个整型数组arr进行排序(1-100)import java.util.Scanner;public Test{public static void main(String[] args){ // 创建数组并赋值 System.out.println("输入数组长度"); Scanner scan = new Scanner(System.in); int len = scan.nextInt(); int[] arr = new int[len]; for(原创 2020-06-23 08:48:51 · 261 阅读 · 0 评论 -
Eclipse的常用快捷键
Eclipse的常用快捷键1.补全代码的声明: alt + /快速修复 : ctrl + 1批量导包: ctrl + shift + o使用单行注释: ctrl + /使用多行注释: ctrl + shift + /取消多行注释: ctrl + shift +复制指定行的代码: ctrl + alt + down 或 ctrl + alt + up删除指定行的代码: ctrl + d上下移动代码: alt + up 或 alt + down切换到下一行代码空位: shift + ent原创 2020-06-20 22:54:04 · 119 阅读 · 0 评论 -
Eclipse的常见问题及解决方案
Eclipse的常见问题及解决方案常见问题:1.双击 Eclipse 启动图标,不能正常启动 Eclipse启动不了的原因有很多种,这里需要大家从如下几个方面排查1.java的环境变量是否正确配置需要在命令行输入 javac.exe 或 java.exe 进行检查2.是否正确的安装了 JDK 和 JRE3.安装 的 JDK 的版本 32 位 还是 64 位 必须与 Eclipse 版本 一致4.修改Eclipse 安装目录下的 eclipse.ini 配置文件2.进入 Eclipse时没有可原创 2020-06-20 22:51:43 · 1839 阅读 · 0 评论 -
Eclipse的下载,安装,配置保姆级教程,多图预警!
Eclipse的下载,安装,配置详细教程Eclipse的下载Eclipse的安装Eclipse的配置运行HelloWorld程序Eclipse的下载下载链接:http://www.eclipse.org/downloads/点击 Download Packages点击右边的Windows 64-bit,即可下载Eclipse的安装1. Eclipse的安装将下载好的Eclipse 解压或安装到没有中文且没有空格的路径下。2.设置 workspace首次启动,选择指定的工作原创 2020-06-20 22:25:44 · 702 阅读 · 1 评论 -
编程美学——Java的命名规范(细节)
Java的命名规范(细节)标识符命名:只能由字母、数字、下划线、$符号组成.不能以数字开头不能使用java的关键字和保留字忌讳拼音命名和无意义命名1、项目名和包名全部小写如:myproject、mypackage2、类名首字母大写,其余组成词首字母依次大写.(大驼峰命名)如:MyClass3、变量名,方法名首字母小写,如果名称由多个单词组成,除首字母外的每个单词的首字母都要大写(小驼峰命名)如:myVariable、myMethod4、常量名全部大写.如:PI = 3.原创 2020-06-19 09:41:50 · 143 阅读 · 0 评论 -
Java的默认数据类型及推荐的基本运算方式(细节)+代码演示
Java的默认数据类型及推荐的基本运算方式(细节)默认数据类型推荐的基本运算方式(细节)默认数据类型:java默认整型数据为int ,浮点型数据为double构建整型变量时,建议使用int声明,如果使用byte,short声明整型变量容易造成编译不通过。同理,浮点型变量建议使用double声明。例如:byte b = 1;short s = 2;s = b + s; //编译不通过这是因为整型进行运算时默认转化为int型进行运算,从而导致**(b+s)实际为int型**原创 2020-06-18 20:06:00 · 463 阅读 · 0 评论 -
Java的基本数据类型转换+代码演示
Java的基本数据类型转换问题Java的基本数据类型自动类型转换强制类型转换Java的基本数据类型包括:整型:byte, short, int , long浮点型:float,double字符型:char布尔型:boolean自动类型转换:如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,则这种方式被称为“自动类型转换”。在没有强转符的情况下,只能用范围大的数去接范围小的数,如图所示。尝试byte转char/shortbyte a = 1原创 2020-06-18 10:05:21 · 193 阅读 · 0 评论 -
JAVA零基础安装教程+环境变量配置
JAVA零基础安装教程+环境变量配置JAVA官网JAVA的下载选择JAVA的正式安装JAVA环境变量的配置JAVA 8的安装包下载注:嫌麻烦的直接点击 5. JAVA 8的安装包下载,即可下载到博主上传的java 8安装包。然后进行环境变量的配置。JAVA官网:第一步:去到官网,点击https://www.oracle.com/index.html即可。目前oracle首页更新成这样了,看着很花,不过用担心,咱们一步步来:首先,鼠标点击页面左上角的菜单栏(黄圈);然后在菜单栏的右下原创 2020-06-17 15:59:34 · 5392 阅读 · 6 评论