19 staic关键字
static1 静态变量 静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它。静态变量在内存中只存在一份。 实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死。 static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。所以我们一般在这两种情况下使用静态变量:对象之间共享数据、访问方便。 123456789101112public class A { private int x; // 实例变量 private static int y; // 静态变量 public static void main(String[] args) { // int x = A.x; // Non-static fiel...
22 Java包机制
包1 基本概念包我们每天建的项目就是在一个目录下,我们每次都会建立一个包,这个包在磁盘下其实就是一个目录。包是用来分门别类的管理技术,不同的技术类放在不同的包下,方便管理和维护。 包名的命名规范: 12路径名.路径名.xxx.xxx// 例如:com.github.krislinzhao 包名一般是公司域名的倒写。例如:黑马是www.github.com,包名就可以定义成com.github.技术名称。 包名必须用’’.”连接。 包名的每个路径名必须是一个合法的标识符,而且不能是Java的关键字。 2 权限修饰符在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,我们之前已经学习过了public 和 private,接下来我们研究一下protected和缺省(default默认)修饰符的作用。 public:公共的,所有地方都可以访问。 protected:当前类 ,当前包,当前类的子类可以访问。 缺省(没有修饰符):当前类 ,当前包可以访问。 private:私有的,当前类可以访问。public > protected ...
20 final关键字
final1. 数据声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。 对于基本类型,final 使数值不变; 对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。 如果引用时类的成员变量,则必须当场赋值,否则编译会报错。 1234final int x = 1;// x = 2; // cannot assign value to final variable 'x'final A y = new A();y.a = 1; 2. 方法声明方法不能被子类重写。当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。 private 方法隐式地被指定为 final,如果在子类中定义的方法和基类中的一个 private 方法签名相同,此时子类的方法不是重写基类方法,而是在子类中定义了一个新的方法。 3. 类声明类不允许被继承。
04 数学计算
1 MathMath类Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。 Math中的常量 Math.PI 记录的圆周率 Math.E 记录e的常量 Math中的函数三角函数 Math.sin 正弦函数 Math.asin 反正弦函数 Math.cos 余弦函数 Math.acos 反余弦函数 Math.tan 正切函数 Math.atan 反正切函数 Math.atan2 商的反正切函数 Math.toDegrees 弧度转化为角度 Math.toRadians 角度转化为弧度 舍入函数 Math.abs 求绝对值 Math.ceil 得到不小于某数的最大整数 Math.floor 得到不大于某数的最大整数 Math.IEEEremainder 求余 Math.max 求两数中最大 Math.min 求两数中最小 Math.round 同上,返回int型或者long型(上一个函数返回double型) 指数幂计算 Math.sqrt 求开方 Math.pow 求某数的任意次方, 抛出ArithmeticExceptio...
08 随机数Random
2 Random简介在 Java中要生成一个指定范围之内的随机数字有两种方法:一种是调用 Math 类的 random() 方法,一种是使用 Random 类。 Random():该构造方法使用一个和当前系统时间对应的数字作为种子数,然后使用这个种子数构造 Random 对象。Random(long seed):使用单个 long 类型的参数创建一个新的随机数生成器。 Random 类提供的所有方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的概率是均等的 实例123456789101112131415161718192021package cn.itcast.demo1; import java.util.Random;//使用时需要先导包import java.util.Scanner; public class RAndom { public static void main(String[] args) { Random r = new Random();//以系统自身时间为种子数 int i = r.n...
09 System类
1 System比较有用的方法1234567891011121314static void setIn(InputStream in) // 标准输入的重定向static void setOut(PrintStream out) // 标准输出的重定向static void setErr(PrintStream err) // 标准错误的重定向/******************************/static Map<String,String> getenv() // 返回所有的环境变量的键值对static String getenv(String name) // 返回特定环境变量的值/******************************/static Properties getProperties() // 返回所有的系统属性static String getProperty(String key) // 返回特定的系统属性的值/******************************/static ...
01 Java数据结构
数据结构1 线性数据结构数据存储的常用结构有:栈、队列、数组、链表和红黑树。我们分别来了解一下: 栈 栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。 简单的说:采用该结构的集合,对元素的存取有如下的特点 先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。 栈的入口、出口的都是栈的顶端位置。 这里两个名词需要注意: 压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。 弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。 队列 队列:queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。 简单的说,采用该结构的集合,对元素的存取有如下的特点: 先进先出(即,存进去的元素,要在后它前面的元素依次取出后...
03 List
List 接口0 概述简介List 接口和 Set 接口齐头并进,是我们日常开发中接触的很多的一种集合类型了。整个 List 集合的组成部分如下图 List 接口直接继承 Collection 接口,它定义为可以存储重复元素的集合,并且元素按照插入顺序有序排列,且可以通过索引访问指定位置的元素。常见的实现有:ArrayList、LinkedList、Vector和Stack AbstractList 和 AbstractSequentialListAbstractList 抽象类实现了 List 接口,其内部实现了所有的 List 都需具备的功能,子类可以专注于实现自己具体的操作逻辑。 12345// 查找元素 o 第一次出现的索引位置public int indexOf(Object o)// 查找元素 o 最后一次出现的索引位置public int lastIndexOf(Object o)//··· AbstractSequentialList 抽象类继承了 AbstractList,在原基础上限制了访问元素的顺序只能够按照顺序访问,而不支持随机访问,如果需要满足随机...
07 Java类加载机制
Java类加载机制 https://blog.csdn.net/qq_29167297/article/details/124800850 0 JVM简介JVM空间JVM内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 ClassLoader 1 加载加载阶段是将class文件从磁盘或者jar等读到JVM内存中,并为其创建一个Class对象。任何一个类被使用时候系统都会为其创建一个Class对象的。加载的同时将加载的这些数据转换成方法区中运行时数据(运行时候数据区:静态变量、静态代码块、常量池等),作为方法区数据的访问入口。 加载是类加载的第一个过程,在这个阶段,将完成以下三件事情: 通过一个类的全限定名获取该类的二进制流。 将该二进制流中的静态存储结构转化为方法去运行时数据结构。 在内存中生成该类的Class对象,作为该类的数据访问入口。 事实上,这三条限定都不是很严格,比如第一条,并没有明确指出通过全限定名从哪里得到二进制流,由此就有很多不同的实现: 在ZIP包中读取(JAR,EAR,WAR) 从网络中获取(APPLET) 运行时计算生成,这种场景使...
04 虚拟机性能监控与故障处理工具
生产环境如何排除和优化 JVM?https://cloud.tencent.com/developer/article/2177482 问题排查工具有哪些给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据主要包括以下几种,当运行的程序出现问题的时候,你首先也应该找到相关的数据进行分析。 异常堆栈 虚拟机运行日志 垃圾收集器日志 线程快照(threaddump文件) 堆转存快照(heapdump文件) 如果是在生产环境中直接排查 JVM 的话,最简单的做法就是使用 JDK 自带的 6 个非常实用的命令行工具来排查。它们分别是:jps、jstat、jinfo、jmap、jhat 和 jstack,它们都位于 JDK 的 bin 目录下,可以使用命令行工具直接运行,其目录如下图所示: 1. jps(虚拟机进程状况工具)jps(JVM Process Status tool,虚拟机进程状况工具)它的功能和 Linux 中的 ps 命令比较类似,用于列出正在运行的 JVM 的 LVMID(Local Virtual Machine ...














