Java基础
HelloWorld丶丶
这个作者很懒,什么都没留下…
展开
-
面向过程和面向对象的区别
面向过程:分析问题得到解决问题的步骤,用函数依次实现这些步骤,然后依次调用这些函数。面向对象:将解决问题所涉及的事物构建成对象,由各个对象的行为组合成解决问题的步骤。例如,对于把大象装进冰箱这个问题: - 面向过程:1.打开冰箱 2.把大象放进冰箱 3.关上冰箱。 - 面向对象:1.冰箱.开门() 2.大象.移动() 3.冰箱.关门()。原创 2018-02-04 00:48:43 · 185 阅读 · 0 评论 -
String、StringBuffer、StringBuilder以及对String不变性的理解
String、StringBuffer、StringBuilderString、StringBuffer、StringBuilder都是final类,不可以被继承。String是不可变的,而StringBuffer和StringBuilder是可变的。StringBuffer是线程安全的,而StringBuilder不是线程安全的,StringBuffer和StringBuilder中的...原创 2018-02-10 20:28:22 · 462 阅读 · 0 评论 -
Java中是否有内存泄漏和内存溢出
内存泄漏与内存溢出 内存泄露(memory leak):指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存都会被耗光。内存溢出(out of memory):是指程序在申请内存时,没有足够的空间分配给程序使用。内存泄漏最终会导致内存溢出。内存泄漏分类 常发性内存泄漏:发生内存泄露的代码会被多次执行到,每次被执行的时候都会导致一块...转载 2018-02-21 21:07:27 · 310 阅读 · 0 评论 -
sleep和wait分别是那个类的方法,有什么区别
sleep是Thread类的方法,wait是Object类的方法。区别: sleep方法是Thread类的静态方法,调用此方法会让当前线程暂停指定的时间,将执行机会(CPU)让给其他线程,但是不会释放锁,因此休眠时间结束后自动恢复(程序回到就绪状态)。wait是Object类的方法,调用对象的wait方法导致线程放弃CPU的执行权,同时也放弃对象的锁(线程暂停执行),进入对象的等待池(wa...原创 2018-02-24 17:34:41 · 2022 阅读 · 0 评论 -
synchronized与lock的区别
(用法)synchronized是隐式锁,可以用在方法上,也可以用在特定代码块中,由JVM来管理锁的释放。(用法)lock是显式锁,需要显式指定起始位置和终止位置,一般使用ReenterantLock类作为锁,多个线程中要使用同一个ReenterantLock对象才能保证锁的生效。在加锁和解锁处需要通过lock和unlock显式指出,所以一般会在finally块中写unlock以防死锁。Loc...转载 2018-02-24 18:14:11 · 376 阅读 · 0 评论 -
synchronized底层如何实现的?用在代码块和方法上有什么区别?
。原创 2018-02-24 19:44:45 · 831 阅读 · 1 评论 -
Java中的异常体系,常见的异常
Java中的异常体系 Java把所有的非正常情况分为两种:异常(Exception)和错误(Error),它们都继承Throwable父类。 Error错误,一般是指与虚拟机有关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。通常应用程序无法处理这些错误,因此应用程序不应该试图使用catch块来捕获Error对象。在定义该方法时,也无须在...原创 2018-02-24 21:01:00 · 2592 阅读 · 0 评论 -
单例模式的写法及注意事项
注意事项: 私有构造函数私有静态引用指向自己的实例以自己实例为返回值的公有静态方法尽量使用懒加载写法 第一种:饿汉public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){} public static...原创 2018-02-25 13:26:21 · 642 阅读 · 0 评论 -
匿名内部类是什么?如何访问在其外面定义的变量?
匿名内部类 匿名内部类是没有名字的内部类。因为没有名字,所以匿名内部类只能只能使用一次,通常用来简化代码编写。使用匿名内部类有个前提条件:必须继承一个父类或者实现一个接口。匿名内部类如何访问在其外面定义的变量:匿名内部类不能访问外部类方法中的局部变量,除非该变量被声明为final类型 这里所说的“匿名内部类”主要是指在其外部类的成员方法内定义的同时完成实例化的类,若其访问该成员方法中的...原创 2018-02-25 14:02:37 · 2066 阅读 · 1 评论 -
如果你定义一个类,包括学号,姓名,分数,如何把这个对象作为key?
如果你定义一个类,包括学号,姓名,分数,如何把这个对象作为key?要重写equals和hashcode吗? 需要重写equals方法和hashcode方法,还必须保证对象一旦创建,其hashcode就不会改变。...原创 2018-02-25 14:36:52 · 447 阅读 · 0 评论 -
Student s = new Student();在内存中做了哪些事情?
加载Student.class文件进内存,如果该类有父类,要先加载其父类在虚拟机栈中为引用变量s开辟空间(栈中不会默认初始化)在堆内存中为学生对象开辟空间,进行默认初始化(0,null)[如果Student有父类]父类属性的初始化(代码块和定义属性时的赋值,哪个写在前先执行哪个); [如果Student有父类]父类的构造函数的初始化; Student属性的初始化(代码块和定义属性时的赋...原创 2018-02-27 18:48:43 · 859 阅读 · 0 评论 -
Java对象的实例化过程
以下过程不适用没有父类的Object类 1. 要加载该对象所属类,得先加载该对象所属类父类,所以第一步是加载该对象所属类父类; 2. 加载该对象所属类; 3. 给该对象分配空间,并且执行默认初始化(0,null); 4. 父类属性的初始化(代码块和定义属性时的赋值,哪个写在前先执行哪个); 5. 父类的构造函数的初始化; 6. 子类属性的初始化(代码块和定义属性时的赋值,哪个写在前先执...原创 2018-02-27 17:29:45 · 262 阅读 · 0 评论 -
Java序列化,如何实现序列化和反序列化?常见的序列化协议有哪些?
什么是Java序列化将JVM中的对象转化字节流,或者将该字节流存储到硬盘上(持久化存储),用于以后恢复回对象(反序列化),或者将该字节流通过网络传输,之后在网络的其他节点恢复成对象(反序列化)。Java序列化的作用将JVM中的对象转化为字节流,方便存储到硬盘上或者在网络上传输。如何实现序列化和反序列化实现序列化:实现Serializable接口(或者父类实...原创 2018-02-10 23:42:58 · 1424 阅读 · 0 评论 -
Java面向对象的四个基本特征
Java面向对象的四个基础特征抽象:抽象是将一类对象的共同特征总结出来构造成类的过程,包括数据抽象和行为抽象,抽象只关注对象有哪些属性和行为,并不关注行为的细节。封装:将数据和操作数据的方法包装在一个类中,并尽可能将该类的内部细节隐藏,只向外暴露出应该暴露的接口,提供给外界调用。一般将属性隐藏,将操作属性的方法暴露出来。继承:从已有的类派生出新的类,新的类吸收已有类的属性和行为,并扩展原创 2018-02-04 00:31:47 · 634 阅读 · 0 评论 -
面向对象开发的六个基本原则
单一职责原则:每个类(接口或抽象类)只负责一个职责。可以降低代码复杂度,增加可读性和可维护性。里氏替换原则:子类能够替换父类所出现的任何地方。当使用继承时,尽量不要重写或者重载父类中的方法,以免破坏了整个继承体系。因为父类在实现方法的时候,规定了必须遵守的规则和契约。依赖倒置原则:具体依赖抽象,上层依赖下层,核心思想是面向接口编程。两个模块间依赖的应该是抽象(接口或抽象类),而不是细节(实现...原创 2018-02-09 00:35:13 · 1099 阅读 · 0 评论 -
重载(Overload)和重写(Override)
重载(Overload):在同一个类中,有两个或两个以上的方法的方法名相同,但参数列表不同(参数类型不同或者参数个数不同或者两者都不同),称为重载。重写(Override):子类对父类中可以访问的方法进行重新编写,成为重写。重写要遵循”两同两大一小”原则。 1.参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。 2.方法名必须完全与被重写的方法相同。原创 2018-02-04 01:26:30 · 233 阅读 · 0 评论 -
static和final的区别与用途
static:表示静态或者全局,可以修饰属性、方法、代码块,静态属性和静态方法是属于类的(也可以说是属于类的所有对象的),可以用类名.静态属性/静态方法来访问,用static修饰的代码块是静态代码块,当虚拟机(JVM)加载该类时,就会执行静态代码块。 修饰属性:当static修饰属性时,该属性称为静态变量或者类变量,该变量是在JVM加载类时初始化的;不被static修饰的属性是实例变量,在创建...原创 2018-02-09 22:53:45 · 549 阅读 · 0 评论 -
HashMap和Hashtable的区别
继承的父类不同:Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类,但两者都实现了Map接口。Hashtable的方法是线程同步的,而HashMap的方法未经同步,在多线程场合如果要使用HashMap,可以手动进行同步,或者调用Collections.synchronizedMap(Map<K,V> m)方法得到包装的HashMap,或者...原创 2018-02-10 00:11:13 · 216 阅读 · 0 评论 -
HashMap中的key可以是任意对象或数据类型吗
HashMap中的key可以是null,基本数据类型或引用数据类型。为了HashMap的正常使用,key一般是不可变对象,至少该对象中用于计算hash值的属性要不可变,方可保证HashMap的正常使用。...原创 2018-02-10 00:25:35 · 12870 阅读 · 1 评论 -
Hashtable是线程安全的吗
Hashtable是线程安全的,其实现方式是在对应的方法上加上synchronized关键字,效率不高,不建议使用。目前,如果要使用线程安全的哈希表的话,推荐使用ConcurrentHashMap。...原创 2018-02-10 00:30:26 · 12334 阅读 · 0 评论 -
Hashtable、HashMap和ConcurrentHashMap
首先,HashMap是线程不安全的,Hashtable和ConcurrentHashMap是线程安全的。在单线程情况下,使用HashMap效率最高。在多线程情况下,使用ConcurrentHashMap比Hashtable效率高。ConcurrentHashMap和Hashtable的效率不同的原因是因为它们的实现方式不同。Hashtable中有Entry数组,对该数组进行put、get...原创 2018-02-10 19:10:16 · 249 阅读 · 0 评论 -
String有重写Object的hashcode和toString吗?重写equals不重写hashCode会有什么问题?
String有重写Object的hashCode和toString吗:String重写了Object的hashcode和toString方法。如果重写equals不重写hashCode会出现什么问题:首先hashCode和equals应该满足如下关系: 当object1.equals(object2)为true时,那么object1.hashCode()==object2.ha...原创 2018-02-10 21:17:27 · 1479 阅读 · 0 评论 -
java中fail-fast 和 fail-safe的区别
java中fail-fast 和 fail-safe的区别转载 2018-03-06 17:13:46 · 473 阅读 · 0 评论