JavaSE部分
LeonMathilda
万物皆有裂痕,但我相信那是光进来的地方。
展开
-
配置JDK的环境变量Path
下载安装JDK成功之后,右键“我的电脑”——>“属性”——>“高级系统设置”——>“高级” ——>“环境变量”——>在“系统变量”里新建JAVA_HOME(JDK的安装目录),然后在“系统变量” 里找到Path变量进行编辑,在开始处输入%JAVA_HOME%\bin;classpath在JDK1.5之后可以 不添加。 打开cmd,输入java -versio...原创 2019-02-08 21:18:43 · 240 阅读 · 0 评论 -
使用DOS命令运行Java程序
在记事本中写下代码: public class Welcome{ public static void main(String[ ] args){ System.out.println("我是Leon!"); } } 另存为D盘mycode文件夹下,注意类名要和文件名保持一致,区分大小写。 win+R输入cmd,将盘符切换至D:,再输入cd mycode, 然后输入ja...原创 2019-02-08 22:02:32 · 2615 阅读 · 0 评论 -
Java中的变量
变量本质上就是一个“可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名 来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。可以类比停车场上的停车位。 Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小, 比如:int a = 3;表示a变量的空间大小为4个字节。 变量作为程序中最基本的存储单元,其要素...转载 2019-02-09 10:59:03 · 125 阅读 · 0 评论 -
局部变量、成员变量和静态变量
局部变量(local variable) 方法或语句块内部定义的变量。生命周期是从声明位置开始到方法或语句块执行完毕为止。 局部变量在使用前必须先声明、初始化再使用; 成员变量(也叫实例变量,member variable) 方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。 如果不自行初始化,它会自动初始化成该类型的默认初始值。 (int--0;double--0....转载 2019-02-09 11:58:58 · 503 阅读 · 0 评论 -
常量(Constant)
常量(Constant) 常量通常指的是一个固定的值,例如:1、2、“a”、“helloWorld”等。 在java语言中,主要是利用关键字final来定义一个常量。常量一旦被初始化后不能再更改其值。 声明格式为:final String USER_NAME = “Leon”; 为了更好区分和表述,一般将1、2、“a”、“hello World”等称为字面常量, 而使用final修饰...转载 2019-02-09 12:13:59 · 497 阅读 · 0 评论 -
Java基本数据类型和引用数据类型
基本数据类型包括整数类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节); 浮点数类型:float(4字节)、double(8字节) 字符类型:char(2字节); 布尔类型:boolean(1bit); 引用数据类型(4字节):类(class)、接口(interface)、数组(array)。...原创 2019-02-09 12:36:48 · 59 阅读 · 0 评论 -
BigDecimal处理舍入误差的计算
float大概精确到小数点后7位,double精确位数是float的两倍。浮点数存在舍入误差,数字不能精确表示。 BegDecimal通常使用在不能产生舍入误差的计算中。 例如: import java.math.BigDecimal; public class Main{ public static void main(String[ ] args){ BigDecimal ...原创 2019-02-09 13:23:53 · 322 阅读 · 0 评论 -
取模运算
其操作数可以是浮点数,但一般是整数,结果是余数。余数符号与左边操作数相同。 例如:7%3=1;-7%3=-1;7%-3=1;原创 2019-02-09 13:45:03 · 1717 阅读 · 0 评论 -
逻辑运算符
转载 2019-02-09 14:11:18 · 70 阅读 · 0 评论 -
位运算符
~(取反,只针对一个操作数); &(按位与); |(按位或); ^(按位异或); <<(左移运算符,左移1位相当于乘2); >>(右移运算符,右移1位相当于除2取商); 例如:3&4=0;//0011 & 0100 = 0000; 3|4=7;//0011 | 0100 = 0111; 3^4=7;//0011 ...原创 2019-02-09 14:31:11 · 93 阅读 · 0 评论 -
三元运算符
X ?Y:Z 其中X为boolean类型表达式,先计算X的值,若为true,则整个运算的结果为表达式Y的值, 否则整个运算的结果为表达式Z的值。 int a = 80; String b = a>60 ? "及格" : "不及格"; System.out.println(b); //及格...原创 2019-02-09 14:50:19 · 109 阅读 · 0 评论 -
方法的重载(Overload)
方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据参数自动匹配对应的方法。 重载的方法,实际是完全不同的方法,只是名称相同而已! 构成方法重载的条件: 1、不同的含义:形参类型、形参个数、形参顺序不同。 2、只有返回值不同不构成方法的重载。例如:int a(String str){ }与void a(String str){ } 3、只有形参的名称不同,...原创 2019-02-09 16:35:33 · 133 阅读 · 0 评论 -
程序执行过程中的栈、堆、方法区、栈帧及内存变化过程
Java虚拟机的内存可以分为三个区域:栈stack,堆heap,方法区method area。 栈的特点如下: 1、栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量,操作数,方法出口等); 2、JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等); 3、栈属于线程私有,不能实现线程间的共享。 4、栈的存储特性是”先进后出,后进先出“...转载 2019-02-10 10:59:44 · 1559 阅读 · 0 评论 -
通用分代垃圾回收详解
分代垃圾回收机制,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不用生命周期的对象可以 采取不同的回收算法,以便提高回收效率。我们将对象分为三种状态:年轻态、年老态、持久代。JVM将堆内存 划分为Eden、Survivor和Tenured/Old空间。 1、年轻代 所有新生成的对象首先都是放在Eden区。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象,对应 的是Mi...转载 2019-02-10 12:40:24 · 625 阅读 · 0 评论 -
垃圾回收原理和算法
**内存管理** Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放。 对象空间的分配:使用new关键字创建对象即可。 对象空间的释放:将对象赋值null即可。垃圾回收器将负责回收所有“不可达”对象的内存空间。 **垃圾回收过程** 任何一种垃圾回收算法一般要做两件基本事情: 1、发现无用的对象 2、回收无用对象占用的内存空间。 垃圾回收机制保证可以将“无...转载 2019-02-10 13:07:42 · 363 阅读 · 0 评论 -
开发中容易造成内存泄漏的操作
**创建大量无用对象** 比如,我们在需要大量拼接字符串时,使用了String而不是StringBuilder。 String str = ""; for(int i =0;i<10000;i++){ str += i; //相当于产生了10000个String对象 } **静态集合类的使用** 像HashMap、Vector、List等的使用最容易出现内存泄漏,这些静态变...转载 2019-02-10 13:36:48 · 183 阅读 · 0 评论 -
this的本质和对象创建的过程
**对象创建的过程和this的本质:** 使用new关键字调用构造器时,构造器也确实返回该类的对象,但这个对象并不是完全由构造器负责创建。 创建一个对象分为如下四步: 1、分配对象空间,并将对象成员变量初始化为0或空。 2、执行属性值的显示初始化; 3、执行构造方法; 4、返回对象的地址给相关的变量; this的本质就是“创建好的对象的地址”!由于在构造方法调用前,对象已经创建,因...转载 2019-02-10 14:28:40 · 245 阅读 · 0 评论 -
static关键字
在类中,用static声明的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同, 在整个应用程序执行期间都有效。它有如下特点: 1、为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。 2、对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享! 3、一般用“类名.属性名/方法”来调用。(也可以通过对象引用或类名(不需要实例化)访问静...转载 2019-02-10 14:46:36 · 172 阅读 · 0 评论 -
Java中参数传值机制
Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。 也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。 **基本数据类型参数的传值** 传递的是值的副本。副本改变不会影响原件。 **引用数据类型的传值** 传递的是值的副本。但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”, 改变“副本指向地址对象的值,也...转载 2019-02-10 15:26:28 · 372 阅读 · 0 评论 -
继承
**继承的实现** “继承”让我们更加容易实现类的扩展。比如,我们定义了人类,再定义Boy类就只需要扩展人类即可。 实现了代码的重用,不用再重新发明轮子(don't reinvent wheels)。 从英文字面意思解释,extends的意思是“拓展”。子类是父类的拓展。 **继承使用要点** 1、父类也称作超类、基类、派生类等。 2、Java中只有单继承,没有像C++那样的多继承,...转载 2019-02-10 17:38:50 · 101 阅读 · 0 评论 -
重写(override)
**方法的重写override** 子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。 **方法重写需要符合下面的三个要点:** 1、“==”:方法名、形参列表相同; 2、“<=":返回值类型和声明异常类型,子类小于等于父类。 3、“>=”:访问权限,子类大于等于父类。 Object类是所有Java类的根基类,也就意味着所有的Ja...转载 2019-02-10 19:29:39 · 544 阅读 · 0 评论 -
封装
**封装的实现----使用访问控制符** Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种“访问控制符”分别为private、default、protected、public, 它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。 下面详细讲述它们的访问权限问题。其访问权限范围如表所示:1、private...转载 2019-02-10 20:45:26 · 108 阅读 · 0 评论 -
多态(polymorphism)
“多态”指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法, 具体实现会完全不同。比如:同样是调用人的“休息”方法,张三是睡觉,李四是旅游;同样是 调用人“吃饭”的方法,中国人使用筷子吃饭,英国人使用刀叉吃饭。 多态的要点: 1、多态是方法的多态,不是属性的多态(多态与属性无关)。 2、多态的存在要有3个必要条件:继承、方法重写、父类引用指向子类对象。 3、...转载 2019-02-10 21:37:25 · 223 阅读 · 0 评论 -
final关键字
final关键字的作用: 1、修饰变量:被它修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。 例:final int MAX_SPEED = 120; 2、修饰方法:该方法不可被子类重写。但是可以被重载! 例:final void study(){ }; 3、修饰类:修饰的类不能被继承。比如:Math、String等。 例:final class A{ }...转载 2019-02-11 13:08:56 · 116 阅读 · 0 评论 -
抽象类-抽象方法
**抽象方法** 使用abstract修饰的方法,没有方法体,只有声明。定义的是一种“规范”, 就是告诉子类必须要给抽象方法提供具体的实现。 **抽象类** 包含抽象方法的类就是抽象类。通过abstract方法定义“规范”,然后要求子类必须定义具体实现。 通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。 **抽象类的使用要点:** 1、有抽象方法的类只能定义成抽象...转载 2019-02-11 13:09:09 · 90 阅读 · 0 评论 -
多线程_优先级_priority
package com.sxt.state;/** * 线程的优先级1-10 * 1、NORM_PRIORITY 5默认 * 2、MIN_PRIORITY 1 * 3、MAX_PRIORITY 10 * @author *优先级不代表先后顺序,代表概率 *优先级高的,执行的时间片可能多一些、早一些,不代表绝对的先后顺序 */public class PriorityTes...转载 2019-02-22 11:36:06 · 421 阅读 · 0 评论 -
多线程_守护线程_daemon
package com.sxt.state;/** * 守护线程:是为用户线程服务的;JVM停止不用等待守护线程执行完毕 * 默认:用户线程 JVM需要等待用户线程执行完毕才会停止 * @author * */public class DaemonTest { public static void main(String[] args) { Thread t1 =...转载 2019-02-22 11:36:18 · 118 阅读 · 0 评论 -
手工实现LInkedList--节点概念、add方法、get方法、remove方法、泛型
public class Node {Node previous;//上一个节点Node next ;//下一个节点Object element;//元素数据public Node(Node previous, Node next, Object element) { super(); this.previous = previous; this.next = next; t...转载 2019-02-16 20:30:17 · 446 阅读 · 0 评论 -
Vector向量
转载 2019-02-16 21:36:37 · 182 阅读 · 0 评论 -
Map接口_HashMap常用方法
注:Map中键不能重复!如果重复(是否重复是根据equals方法来判断),则新的覆盖旧的。转载 2019-02-16 22:19:51 · 167 阅读 · 0 评论 -
多线程_其他方法
package com.sxt.state;/** * 其他方法 * isAlive:线程是否还活着 * Thread.currentThread():当前线程 * setName、getName:代理名称 * * @author * */public class InfoTest { public static void main(String[] args) th...转载 2019-02-22 11:36:30 · 118 阅读 · 0 评论 -
多线程_并发_非同步_三大经典案例
线程同步(synchronized):是指在一个多线程的环境下,我们要保证数据的准确性和安全性,同时还要提高它的性能。模拟12306抢票负数的出现:假设最后一张票是1,现在A、B、C都来抢票,假设B进来了,A也进来了,C也进来了,假设B优先进来,Thread.sleep(200)等待(抱着资源睡觉),A跟C都在等待,假设B先获得时间片把这张票拿走了,此时C醒来了,只能拿0,A也醒来了只能拿-1...转载 2019-02-22 11:36:47 · 198 阅读 · 0 评论 -
多线程_并发_同步_队列与锁
注:并发实际上就是同一个对象被多个线程同时操作,这里强调三个点:1、同一个对象【如果每个人操作自己的银行卡显然不会发生并发】2、多个线程【如果这个银行卡只有你一个人用显然也不会发生问题】3、同时操作【大家都在操作这个卡的时候,就会发生并发问题】。并发三要素:同一个对象、多线程、同时。一旦发生并发就会产生数据不准确的问题,之前的账户余额不对、12306的票出现了负数或者同一个位置被多个...转载 2019-02-22 11:37:04 · 667 阅读 · 0 评论 -
多线程_并发_同步_synchronized方法_synchronized块
package com.sxt.syn;/** * 线程安全: 在并发时保证数据的正确性、效率尽可能高 * synchronized * 1、同步方法 * 2、同步块 * @author * */public class SynTest01 { public static void main(String[] args) { //一份资源 SafeWeb12306 ...转载 2019-02-22 11:37:18 · 302 阅读 · 0 评论 -
多线程_并发_同步_性能分析
对比同步块和同步方法,理解一下同步块可以力度更小的锁定资源。在力度更小的锁定资源时我们尽可能的提升它的性能。package com.sxt.syn;/** * 线程安全: 在并发时保证数据的正确性、效率尽可能高 * synchronized * 1、同步方法 * 2、同步块 * * @author 裴新 QQ:3401997271 * */public class SynB...转载 2019-02-22 11:37:37 · 231 阅读 · 0 评论 -
多线程_并发_同步_快乐影院
package com.sxt.syn;/** * 快乐影院 * * @author * */public class HappyCinema { public static void main(String[] args) { Cinema c = new Cinema(2,"happy sxt"); new Thread(new Customer(c,2),"老高...转载 2019-02-22 11:37:57 · 2702 阅读 · 0 评论 -
多线程_并发_同步_快乐火车票
package com.sxt.syn;/** * 快乐火车票 * * @author * */public class Happy12306 { public static void main(String[] args) { Web12306 c = new Web12306(4,"happy sxt"); new Passenger(c,"老高",2).sta...转载 2019-02-22 11:38:25 · 177 阅读 · 0 评论 -
HashMap底层原理_存储键值对底层过程
转载 2019-02-17 10:20:26 · 609 阅读 · 0 评论 -
数组概述和特点
**数组的定义:** 数组是*相同类型*数据的*有序*集合。数组描述的是相同类型的若干个数据, 按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素, 每个元素可以通过一个索引(下标)来访问它们。 数组的三个基本特点: 1、长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 2、其元素必须是相同类型,不允许出现混合类型。 3、数组类型可以是任何数据类型,包括基本数据类...转载 2019-02-11 14:43:59 · 8233 阅读 · 0 评论 -
手工实现HashMap(简单版)
package MyPro;public class Node2 {int hash;Object key;Object value;Node2 next;}public class SxtHashMap01 {Node2[] table;//位桶数组。bucket arrayint size;//存放的键值对的个数public SxtHashMap01() { tab...转载 2019-02-17 15:07:03 · 397 阅读 · 1 评论