最近碰到一些应用问题,涉及到了Java中的垃圾回收机制,Garbage Collection,简称GC,这其中的学问,还是不少的,有很多东西需要学习。...首先,关于GC的定义,简单讲,他就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。...与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用。即从gcroot开始,把所有可以搜索得到的对象标记为存活对象。...作为程序员要关注的区域主要有5块,分别是方法区(Method Area),Java栈(Java stack),本地方法栈(Native Method Stack),堆(Heap),程序计数器(Program...旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出错误:java.lang.OutOfMemoryError: Java heap space
什么是 Java 虚拟机?为什么 Java 被称作是 “ 平台无关的编程语言 ” ? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。 ...Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。 Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。 ...JDK: java 开发工具包 , 包含了 JRE 、编译器和其它工具(如: javaDOc 、 java 调试器 ) JRE: java 运行环境 , 包含 java 虚拟机和 java 程序所需的核心类库...可能比较让人迷惑的就是 java 中的对象传递时,对形参的改变依然会意向到该对象的内容。 下面这个例子来说明 java 中是值传递 . ...系统类加载器( system class loader ):它根据 Java 应用的类路径( CLASSPATH )来加载 Java类。一般来说, Java 应用的类都是由它来完成加载的。
{/collapse-item} {collapse-item label="instanceof "} instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例...enum定义的类型就是class,只不过它有以下几个特点: 定义的enum类型总是继承自java.lang.Enum,且无法被继承; 只能定义出enum的实例,而无法通过new操作符创建enum的实例;...还有一种类,它被定义在另一个类的内部,所以称为内部类(Nested Class)。Java的内部类分为好几种,通常情况用得不多,但也需要了解它们是如何使用的。...,可以定义多个参数, 变量参数2代表循环的次数,也可以为多个参数, 参数3 代表每次循环后所增减的值 注释:For里面也可以进行break语句 Java作为一种面向对象语言。...:符号表示的,具体的含义其实就和if-else结构的含义差不多,这种运算符会将某个条件作两种处理,如果满足条件的话就执行第一个结果,如果不满足的话就执行另外一个结果 //java 三元运算符
,序列化的笔记参见[Java-note-序列化.md][5] 15.Java的方法区 与堆一样,是线程共享的区域。...通过方法重写和方法重载实现多态 方法重写是指子类重写了父类的同名方法 方法重载是指在同一个类中,方法的名字相同,但是参数列表不同 30.Java文件 .java文件可以包含多个类,唯一的限制就是:一个文件中只能有一个...37.Java语言的鲁棒性 Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。它提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。...另外,Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时不匹配问题的出现。...38.Java语言特性 Java致力于检查程序在编译和运行时的错误 Java虚拟机实现了跨平台接口 类型检查帮助检查出许多开发早期出现的错误 Java自己操纵内存减少了内存出错的可能性 Java还实现了真数组
1.概述 在Java中,除了基本数据类型之外,其它类型都是引用数据类型,比如String类型和自己定义的class类、数组、接口都是引用类型。...2.什么是值类型和引用类型[定义] 值类型也就是8种基本数据类型; 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变....值类型表示复制一个当前变量传给方法,当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。...3.值传递和引用传递 [值传递] 基本数据类型赋值都属于值传递,值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形参的值,形参发生改变而不影响实参。 ...引用传递传递的是对象的引用地址,也就是它的本身(自己最通俗的理解)。 引用传递:传的是地址,就是将实参的地址传递给形参,形参改变了,实参当然被改变了,因为他们指向相同的地址。
作者:晓风 出处:https://xwjie.github.io 近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?...又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考。 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多。...编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑)。...苦恼*2 过了很长一段这种惶惶不可终日的日子,决定自己要改变,改变的方向就是阅读自己用到的java相关的源代码,看看jdk是如何实现的。就从基本的数据结构看,然后看多线程相关,在学习前台等等。...说了这么多,我想说的就是,j2ee的基础知识就是你做项目中代码背后的东西。提高自己水平的方法很简单,就是把大部分时间去了解实现原理,了解思想,让自己的知识串起来,形成体系。
近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考。...编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑)。...但同时自己心里明白,自己其实没有什么水平,自己这3,4年以来学懂的东西就那么多,其他人几个月就可以学会,自己的竞争力在哪里?这种矛盾的心理,困扰了我非常长的时间,非常的苦恼!...苦恼*2 过了很长一段这种惶惶不可终日的日子,决定自己要改变,改变的方向就是阅读自己用到的java相关的源代码,看看jdk是如何实现的。就从基本的数据结构看,然后看多线程相关,在学习前台等等。...说了这么多,我想说的就是,j2ee的基础知识就是你做项目中代码背后的东西。提高自己水平的方法很简单,就是把大部分时间去了解实现原理,了解思想,让自己的知识串起来,形成体系。
近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考。...编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑)。...但同时自己心里明白,自己其实没有什么水平,自己这3,4年以来学懂的东西就那么多,其他人几个月就可以学会,自己的竞争力在哪里?这种矛盾的心理,困扰了我非常长的时间,非常的苦恼!...苦恼*2 过了很长一段这种惶惶不可终日的日子,决定自己要改变,改变的方向就是阅读自己用到的java相关的源代码,看看jdk是如何实现的。 就从基本的数据结构看,然后看多线程相关,在学习前台等等。...说了这么多,我想说的就是,j2ee的基础知识就是你做项目中代码背后的东西。提高自己水平的方法很简单,就是把大部分时间去了解实现原理,了解思想,让自己的知识串起来,形成体系。
源 / 知乎 文 / 晓风轻 近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?...又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考。 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多。...编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑)。...苦恼*2 过了很长一段这种惶惶不可终日的日子,决定自己要改变,改变的方向就是阅读自己用到的java相关的源代码,看看jdk是如何实现的。 就从基本的数据结构看,然后看多线程相关,在学习前台等等。...说了这么多,我想说的就是,j2ee的基础知识就是你做项目中代码背后的东西。提高自己水平的方法很简单,就是把大部分时间去了解实现原理,了解思想,让自己的知识串起来,形成体系。
上一篇介绍了五种NIO模型,本篇将介绍Java中的NIO类库,为学习netty做好铺垫 Java NIO 由3个核心组成,分别是Channels,Buffers,Selectors。...监听TCP连接,对每个新进来的连接会创建一个SocketChannel。 Buffer Java NIO中的Buffer用于NIO通道进行交互。...ByteBuffer buf = ByteBuffer.allocate(48); Selector Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够检测到通道是否为读写事件准备好的的组件...用NIO创建的客户端与服务端: 服务端: package com.nio; import java.net.InetSocketAddress; import java.nio.ByteBuffer;...; import java.nio.channels.SocketChannel; import java.util.Date; import java.util.Iterator; import java.util.Set
前言: 接着《java基础知识01》,再来聊聊剩下的那些知识点。 一、java基础类库: 1、String字符串: 字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中。...服务端网络编程步骤: 监听端口 获得连接 交换数据 关闭连接 3、Java网络编程: 和网络编程相关的API位于java.net包下。 (1)....部分相关API如下: InetAddress:java 中ip对象 Socket:套接字,通信的端点。...s.close(); ss.close(); } 五、设计模式: Java有23中设计模式,这里只挑几个常用的说一说,想深入了解可以研读《Java设计模式》这本书。...总结: 《java基础知识01》和本文简陋的总结了一些java基础的知识点,由于本人只是个小白,只能在此抛砖引玉,望各位大神多多指点!
Arrays.sort的底层实现 Arrays.sort是Java中提供的对数组进行排序的方法,根据参数类型不同,它提供了很多重载方法: public static void sort(Object[]...6、Timer执行任务完全基于JVM内存,一旦应用重启,那么队列中的任务就都没有了 Java中的序列化机制是咋实现的 序列化是将对象转换为可传输格式的过程。 是一种数据的持久化手段。...在Java的序列化机制中,如果是String,枚举或者实现了Serializable接口的类,均可以通过Java的序列化机制,将类序列化为符合编码的数据流,然后通过InputStream和OutputStream...Java中的注解是干嘛的 Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。...Java 注解是从 Java5 开始添加到 Java 的。 Java的注解,可以说是一种标识,标识一个类或者一个字段,常常是和反射,AOP结合起来使用。
当然 Java 里的数组是无法自动扩的,方法是使用一个新的数组代替已有的容量小的数组,就像我们用一个小桶装水,如果想装更多的水,就得换大水桶。...Collection和Collections区别 java.util.Collection 是一个集合接口。...它提供了对集合对象进行基本操作的通用接口方法。 java.util.Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、 线程安全等操作。...九:数组在内存中是如何分配的 对于 Java 数组的初始化,有以下两种方式 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度,如: //只是指定初始值,并没有指定数组的长度...,而动态初始化方式,程序员虽然没有显示的指定初始化值,但是因为 Java 数组是引用类型的变量,所以系统也为每个元素分配了初始化值 null ,当然不同类型的初始化值也是不一样的,假设是基本类型int类型
一、Java语言的特点 简单性 Java看起来设计的很像c++,取消了很多程序员很少使用的特征。例如:Java不支持go to语句,提供了break和continue语句以及异常处理。...可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。类似地,Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。...编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。 Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。...例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。 Java环境本身对新的硬件平台和操作系统是可移植的。...即java程序的运行时环境,包含了java虚拟机,java基础类库。 JDK: Java Development Kit(java开发工具包)。即java语言编写的程序所需的开发工具包。
继承 继承的好处 提高了代码的复用性 提高了代码的维护性 让类与类之间产生了关系,是多态的前提 继承弊端 类的耦合性增强了 开发的原则:高内聚,低耦合 耦合:类与类的关系 内聚:就是自己完成某件事情的能力...继承特点 Java只支持单继承 Java支持多层继承(继承体系) 如果想用这个体系的所有功能用最底层的类创建对象 如果想看这个体系的共性功能,看最顶层的类 继承注意事项 子类只能继承父类所有非私有的成员...调用本类的其他构造方法,但是子类的其他构造方法中一定会有一个去访问了父类的带参构造方法 让父类提供无参构造 因为子类会继承父类中的数据,可能还会使用父类的数据 所以,子类初始化之前,一定要先完成父类数据的初始化...override(重写):发生在java的继承中,当子类需要使用和父类方法名相同,但实现过程不同的方法时,就会用到重写。...需要注意的是重写的方法的参数列表必须与弗雷的被重写的方法的参数列表完全一直,但返回值类型可以是父类被重写方法返回值类型的衍生类或者是相同类. overload(重载) : 重载发生在同一个类中,同一个类中需要用相同的方法名但实现过程不同的时候用到重载
int [] numbers = {10, 20, 30, 40, 50}; for (int x : numbers){ System.out.println(x); } //类似python中的
;C++面向过程/对象;java跨平台纯面向对象的语言;.Net跨语言平台; javaSE:java标准版,提供完整的java核心api,以前称为J2SE; javaEE:java企业版,主要正对web...应用程序开发,以前称为J2EE; javaME:小型版,用于移动终端,以前称为J2ME; java Card:支持一些Java小程序,运行在小内存设备上的平台; java语言特点: 面向对象;基本概念:...类、对象;三大特性:封装、继承、多态; 健壮性、完善性;吸收了C、C++的特点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制; 跨平台性 JVM;...通过java语言编写的应用程序可以在不同的操作系统上运行; java两种核心机制: java虚拟机:是一个虚拟的计算机,具有指令集并使用不同的存储区域,负责指令执行,管理数据、内存、寄存器; 垃圾回收机制...; jdk和jre: jdk,即java开发工具包其中包含了java的开发工具,也包含了jre,安装了jdk就不用再安装jre; jre:java运行环境,包括java虚拟机和java程序所需的核心类库等
static 关键字 特点 随着类的加载而加载 优先于对象存在 被类的所有对象共享 注意事项 静态方法: 非静态方法:静态变量和成员变量的区别 成员变量 : 只能访问静态变量 成员方法 : 只能访问静态成员方法...成员变量 : 可以是静态的,也可以是非静态的 成员方法: 可以是静态的成员方法, 也可以是非静态的成员方法 因为静态是随着类的加载而加载,this是随着对象的创建而存在 静态比对象先存在 在静态方法中是没有...this关键字的, 静态方法只能访问静态的成员变量和静态的成员方法 所属不同: 静态变量属于类,所以也称为类变量 成员变量属于对象,所以也称为实例变量(对象变量) 内存中位置不同: 静态变量存储于方法区的静态区...,虽然不是关键字,但是被jvm识别 String[] args 以前用于接收键盘录入的 代码块 在Java中,使用{}的代码被称为代码块 根据其位置和声明的不同,可以分为局部代码块,构造代码块, 静态代码块...,同步代码块 局部代码块 在方法中出现,限定变量生命周期,及早释放,提高内存利用率 构造代码块(初始化块) 在类中方法外出现,多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
学习视频【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibil 1.JAVA基础 1....转义字符: **变量:**就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。...//计算阶乘 //依次类推,就是将这个的结果传递给下一个,学了C语言之后,在学JAVA的,会感觉简单很多,很容易理解的。...) (JAVA的学习,说白了就是学习一个又一个的类。)...3.异常体系结构 JAVA把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超累。
领取专属 10元无门槛券
手把手带您无忧上云