Java
ibinbinb
这个作者很懒,什么都没留下…
展开
-
0、概念(并发、高并发、并行、多线程)
并行性(parallel):指在同一时刻,有多条指令在多个处理器上同时执行; 并发性(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。实质是一个物理CPU(也可以是多个物理CPU)在若干个程序之间多路复用,并发性是对有限物理资源强制行使 多用户共享以提高效率。并发也可以并行(多核) 多线程:多个线程并发执行的...转载 2019-02-14 17:50:27 · 315 阅读 · 0 评论 -
final关键字
final:可以修饰类:则该类不能被继承,属性默认也是 final 的可以修饰方法:则该方法不能被重写(网上认为 final 比非 final 快,就是认为它是在编译的时候已经静态绑定了,不需要在运行时再动态绑定。这个可能以前的JVM上是正确的,但在现代的JVM上,这个可以认为没什么影响)可以修饰属性:则该类的属性不会进行隐式的初始化(只初始化一次,但可多次读取) ,也就是必须赋值fin...原创 2019-02-12 20:50:06 · 87 阅读 · 0 评论 -
static关键字
static:是java中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法:用来修饰成员变量,静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。 用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于工具类;在静态方法中不...原创 2019-02-12 20:50:29 · 166 阅读 · 0 评论 -
时间格式化(SimpleDateFormat)
使用 Date 类的默认无参构造方法创建出的对象就代表当前时间,我们可以直接输出 Date 对象显示当前的时间,显示的结果如下:public static void main(String[] args){ Date date = new Date(); System.out.println(date); // Mon Feb 11 21:58:30 CST 2019 } ...原创 2019-02-13 13:13:22 · 51906 阅读 · 4 评论 -
内部类
为什么要使用内部类? 1.内部类的代码操作创建它的外围类的对象,可以认为内部类提供了某种进入其外围类的窗口。2.内部类提供了更好的封装,除了该外围类,其他类都不能访问。3.在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。4.创建内部类对象的时刻并不依赖于外围类对象的创建。5.内部类能访问外围类的私有成员这一点,C++中的嵌套类是没有这个特性的。...转载 2019-02-13 13:14:03 · 87 阅读 · 0 评论 -
String不可变
String不可变字符串不变性 下面这张图展示了这段代码做了什么 String s = "abcd"; s = s.concat("ef"); 再以下面一段代码为例:1 String str="abc"; 2 System.out.println(str); 3 str=str+"de"; 4 System.out.println(str); 如果运行这段代码会...原创 2019-02-13 13:17:58 · 236 阅读 · 0 评论 -
五种创建对象方式
1使用new关键字 这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。Employee emp1 = new Employee(); 2使用Class类的newInstance方法 我们也可以使用Class类的newInstance方法创建对象。这个newInstance方法调用无参的构造函数创建对象。 我们可...转载 2019-02-13 13:18:37 · 1569 阅读 · 0 评论 -
多线程
线程的使用方法 :1.创建Thread类或者其子类,重写run方法,该run()方法是线程执行体。2.创建一个Runnable类(更多使用)并重写该接口的run()方法,该run()方法同样是线程执行体。package com.binbin.thread; /** * 〈thread〉 * * @author binbinarvin * @create 2019-01-25 */ cl...原创 2019-02-13 13:19:14 · 109 阅读 · 0 评论 -
JAR
在将应用程序进行打包时,使用者一定希望仅提供给其一个单独的文件,而不是一个含有大量类文件的目录,Java 归档(JAR) 文件就是为此目的而设计的。一个 JAR 文件既可以包含类文件,也可以包含诸如图像和声音这些其他类型的文件。此外, JAR 文件是压缩的,它使用大家熟悉的 ZIP 压缩格。 1 、创建 JAR 文件可以使用 jar 工具制作 JAR 文件(在默认的 JDK 安装中,位...原创 2019-02-13 13:19:40 · 130 阅读 · 0 评论 -
map
映射(map) 数据结构就是为此设计的。映射用来存放键 / 值对。如果提供了键, 就能够查找到值。Java 类库为映射提供了两个通用的实现:HashMap 和 TreeMap。这两个类都实现了 Map 接口。散列映射对键进行散列, 树映射用键的整体顺序对元素进行排序, 并将其组织成搜索树。散列或比较函数只能作用于键。与键关联的值不能进行散列或比较。应该选择散列映射还是树映射呢? 与...原创 2019-02-13 13:20:30 · 217 阅读 · 0 评论 -
queue
队列可以让人们有效地在尾部添加一个元素, 在头部删除一个元素。有两个端头的队列, 即双端队列,可以让人们有效地在头部和尾部同时添加或删除元素。不支持在队列中间添加元素。在 Java SE 6中引人了 Deque 接口,并由 ArrayDeque 和LinkedList 类实现。这两个类都提供了双端队列,而且在必要时可以增加队列的长度。 1 队列:Queue接口Queue接口设计了一些可...原创 2019-02-13 13:20:51 · 6993 阅读 · 1 评论 -
set
Set集合里的多个对象之间没有明显的顺序。Set继承自Collection接口,不能包含有重复元素。判断两个对象相同不是使用"=="运算符,而是根据equals方法。也就是说,我们在加入一个新元素的时候,如果这个新元素对象和Set中已有对象进行注意equals比较都返回false,则Set就会接受这个新元素对象,否则拒绝。因为Set的这个制约,在使用Set集合的时候,应该注意两点:1) 为S...原创 2019-02-13 13:21:15 · 223 阅读 · 0 评论 -
多重选择 switch case
Java 中 switch case 语句用来判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。语法格式如下:switch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意数量的case语句 de...原创 2019-02-12 20:49:42 · 1049 阅读 · 0 评论 -
递归与尾递归
递归的弊端:速度慢; 无法预测运行期间内存的使用情况; 递归比循环更难理解。 在递归调用的过程当中系统为每一层的返回点、局部变量等开辟了栈来存储,因此递归次数过多容易造成栈溢出。 栈维护了每个函数调用的信息直到函数返回后才释放,这需要占用相当大的空间,尤其是在程序中使用了许多的递归调用的情况下。除此之外,因为有大量的信息需要保存和恢复,因此生成和销毁活跃记录(栈上的那块存储空间...原创 2019-02-12 20:49:20 · 144 阅读 · 0 评论 -
StringBuilder StringBuffer String
1、首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。 而StringBuilder和...原创 2019-02-12 20:48:52 · 169 阅读 · 0 评论 -
线程安全(三大特性)、生命周期以及优缺点
一、线程安全一个对象是否安全取决于它是否被多个线程访问(访问时访问对象的方式)。要使对象线程安全,那么需要采用同步的机制来协同对对象可变状态的访问。(java这边采用synchronized,其他还有volatile类型的变量,显式锁以及原子变量) 当某个多线程访问同一个可变状态时候没有同步,则会出现错误,解决办法:1、不在线程之间共享该变量2、将该变量修改为不可变变量...转载 2019-02-14 17:51:17 · 3131 阅读 · 0 评论 -
上下文切换的活性故障
一、上下文切换1、概念:(这边解释的是线程的上下文切换,而不是进程的上下文切换)在某种程度上可以看成多个线程共享同一个处理器的产物。即多线程中,一个线程被暂停(剥夺)处理器的使用权,另外一个线程被选中开始或者继续运行的过程。解释:单处理器可以执行多线程,是因为多个线程被一个处理器以不同的时间处理(时间片轮转,极小时间使得人感受不到,以为多个任务一同进行)。比如两个线程AB,当A线程...原创 2019-02-14 17:51:43 · 270 阅读 · 0 评论 -
多线程编程
一、线程的创建 1.创建Thread类或者其子类重写run方法,该run()方法是线程执行体。2.实现Runnable接口(更多使用)实现run方法。用new Thread(Runnable target).start()方法来启动。(Thread类实现了Runnable接口)3.通过实现callable接口4.使用线程池创建线程 创建线程方式的比较:继承方...转载 2019-02-14 17:52:11 · 1043 阅读 · 0 评论 -
线程同步机制
一、线程同步机制从广义上说,Java平台提供的线程同步机制包括锁、volatile关键字、final关键字、static关键字和一些相关的API,如Object.wait( )/.notify( )等 1、锁的概述和概念:a 线程安全问题的产生:多个线程并发访问共享变量、共享资源;解决办法:一个共享变量或者资源只能被一个线程访问,访问结束后其他线程才能访问(...原创 2019-02-14 17:52:46 · 5387 阅读 · 0 评论 -
Sychronized、Lock、Volatile、原子类
同步的时候非同步也可以同时执行. 一、内置锁Synchronized:1、概念synchronized同步的不是一个代码块,而是一个对象。static的话是class对象。 一个加锁的原则是对不变性加锁:不变性条件中涉及的所有变量都需要由同一个锁来保护。 居有三大特性:有序性,原子性,可见性 不要使用双重锁定,因为JAVA内存模型允许所谓的“无序写入”。 线程对...转载 2019-02-14 17:53:29 · 445 阅读 · 0 评论 -
线程间协作
一、线程间的协作1、等待与通知(wait和notify/notifyAll)是本地Object方法,并且为final方法,无法被重写。 wait:一个线程因其执行目标动作所需的保护条件未满足而被暂停的过程调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor(即锁)。会释放当前的锁,然后让出CPU,进入等待状态。obj是Java中任意一个类的...转载 2019-02-14 17:54:01 · 512 阅读 · 1 评论 -
C++的substr 和 Java的substring比较
C++: stringvar.substr(start,[length]): 返回一个从指定位置开始的指定长度的子字符串。 如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到 string 的最后。 JAVA: stringvar.substring(start,end): 将返回一个包含从 start 到最后(不包含 end )的子字符串的字...原创 2019-02-12 20:41:50 · 246 阅读 · 0 评论 -
quals(Object obj)和hashCode()
JDK对equals(Object obj)和hashCode()这两个方法的定义和规范:在Java中任何一个对象都具备equals(Object obj)和hashCode()这两个方法,因为他们是在Object类中定义的。 equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false。 hashCode()方法返回一个int数,在Obje...原创 2019-02-12 20:42:53 · 311 阅读 · 0 评论 -
java8 新特性(8个)
1、本地变量类型推断(Var)字面量定义局部变量private static void testVar() { var javastack = "javastack"; //等于String javastack = "javastack"; System.out.println(javastack); }接收方法返回值定义局部变量private static vo...原创 2019-02-12 20:45:23 · 159 阅读 · 0 评论 -
Java中的泛型
1.Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是在编译期间能发现类型的错误,防止非定义的类型出现。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 好处:1、泛型可以使代码重复利用 2、泛型类型安全,提供编译时检查 3、性能不错 2. Java的泛型是如何工作的 ? 什么是类型擦除 ? 泛型通过类型擦除进行工作的,编译器在编译...转载 2019-02-12 20:46:21 · 1793 阅读 · 0 评论 -
java异常
Java异常的分类和类结构图 我们根据Javac对异常的处理要求,将异常类分为2类。 1非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序中处理这些异常。所以如果愿意,我们可以编写代码处理(使用try...catch...finally)...原创 2019-02-12 20:47:13 · 95 阅读 · 0 评论 -
list
ArrayList, LinkedList, Vector, Stack是List的4个实现类:ArrayList 是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,适合查找更新元素,尾部插入删除有效,元素可以为NULL。但是随机插入、随机删除效率低。容量不足时,“新的容量”=“(原始容量x3)/2 + 1” LinkedList 是一个双向链表。它也可以被当作堆栈、队列或双...原创 2019-02-13 13:21:40 · 147 阅读 · 0 评论