Java学习
文章平均质量分 61
楠瓜酥
这个作者很懒,什么都没留下…
展开
-
java基础学习(一)
java与c++的区别: C++支持与C语言的向后兼容性,C++是c的一个超集,包括许多c语言不具备的特性。这些特性导致c++在某些方面过于复杂。 java是基于c++的,但是它是一种更纯粹的面向对象程序设计语言。在java中几乎一切都是对象。在java中用”引用“操作对象,但是,拥有一个引用并不一定需要有一个对象与之绑定,例如:String str; 但是如果直接使用该引用,向其发送消息,原创 2017-02-23 21:43:23 · 248 阅读 · 0 评论 -
守护线程
在java线程中有两种线程:1.用户线程(非守护线程) 2、守护线程守护线程是一种特殊的线程。当进程中不存在非守护线程,则守护线程自动销毁。典型的守护线程是垃圾回收线程。所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来原创 2018-03-06 20:22:39 · 218 阅读 · 0 评论 -
Java 串行化技术_Serializable
Java 串行化技术可以使你将一个对象的状态写入一个Byte流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。Java的串行化机制是RMI、EJB等技术的技术基础。用途:利用对象的串行化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。序列化就是一种用来...转载 2018-02-13 15:55:47 · 549 阅读 · 0 评论 -
Synchronized同步方法
“非线程安全”其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”,也就是取到的数据其实是被更改过的。1**、方法内的变量为线程安全的** 方法内部的私有变量,则不存在“非线程安全”的问题,所得结果也就是“线程安全”的。2、实例变量非线程安全原创 2018-03-07 16:58:25 · 3545 阅读 · 1 评论 -
synchronized同步语句块(一)
用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个长时间的任务,那么B线程则必须等待较长时间。可以使用synchronized同步语句块。public class NoSysnTest { public void play(){ try{ //其他无关紧要的部分,放到代码块外部,节省时间原创 2018-03-08 09:49:14 · 734 阅读 · 0 评论 -
synchronized同步语句块(二)
一、静态同步synchronized方法与synchronized(class)代码块 1、静态同步synchronized方法 关键字synchronized可以应用在static静态方法上,是对当前的java文件对应的Class类进行持锁。public class HasSelfPrivateNum {//对静态方法加锁 public synchronized static vo原创 2018-03-08 11:59:28 · 448 阅读 · 0 评论 -
Volatile的实现原理
Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。它在某些情况下比synchronized的开销小,因为它不会引起线程上下文的切换和调度。访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞。可见性的意思是当一个线程修改一个共享变量时,另一个线程能读到这个修改的值。如果一个字段被声明为 volatile,java线程内存模型确保所有线原创 2018-03-08 20:04:34 · 335 阅读 · 0 评论 -
java.util.AbstractList
//继承AbstractCollection,实现List接口public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> 1、构造函数//唯一的构造函数,访问权限是protected ,因此只能在子类中构造 protected AbstractList() { }2、在Lis原创 2018-02-12 14:58:50 · 335 阅读 · 0 评论 -
this.getName()和 Thread.currentThread().getName()的区别
这要分两种情况: 1、继承Thread:1.1 线程类public class CountOperate extends Thread { private String name; public CountOperate(String name){ //初始化变量,但是没有get、set方法 this.name=name; System.ou原创 2018-03-06 11:36:09 · 422 阅读 · 0 评论 -
使用interrupt方法中断线程
调用interrupt()方法仅仅是在线程中打了一个停止的标记,并不是真的停止线程。(想中断哪个线程,就给哪个线程打标)public class Run { public static void main(String[] args) { CountOperate c=new CountOperate(); Thread thread=new Thread(c原创 2018-03-06 15:46:58 · 607 阅读 · 0 评论 -
暂停线程suspend()和恢复线程resume()
1、使用suspend()方法暂停线程(挂起) : 运行->阻塞 2、使用resume()方法恢复线程 : 阻塞->就绪suspend() 和 resume() 被用在等待另一个线程产生的结果的情 形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用 resume() 使其恢复。但suspend()方法很容易引起死锁问题, 已经不推荐使用了。public class Run原创 2018-03-06 17:43:31 · 4490 阅读 · 0 评论 -
线程间通信
一、等待/通知(wait/notify)机制的实现 1、等待(wait) 1.1、作用:使当前执行代码的线程进行等待。 1.2、wait()方法是Object类的方法。而不是Thread的方法。 1.3、该方法用来将当前线程置于“预执行队列”中,并且在wait()所在的代码行处停止执行,直到接到通知或被中断为止。 1.4、在调用wait()之前,线程必须获得该对象的对象级别锁,即只能在同...原创 2018-03-13 20:48:24 · 319 阅读 · 0 评论 -
join方法的使用
在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。如果主线程想等待子线程完成之后再结束,就要用到join()方法。public class Run { public static void main(String[] args) { try{ Object lock=new Object();原创 2018-03-13 21:14:38 · 621 阅读 · 0 评论 -
线程的优先级
线程的优先级分为 1-10这10个等级。优先级较高的线程得到的CPU资源较多。也就是CPU优先执行优先级较高的线程对象的任务。 public final static int MIN_PRIORITY = 1; public final static int NORM_PRIORITY = 5; public final static int MAX_PRIORITY = 10原创 2018-03-06 20:06:22 · 813 阅读 · 0 评论 -
java基础学习(三)控制执行流程
一、true和false java不允许将一个数字作为布尔值使用,可以使用所有关系操作符(>、<、>=、<=、==、!=)构造条件语句,将其转换为一个布尔值。二、if-else 其中 else 是可选的。else if只是一个else后面紧跟另一个新的if语句。public static void main(String[] args){ int x=55;原创 2017-03-12 14:27:32 · 346 阅读 · 0 评论 -
java基础学习(四)初始化与清理
1、用构造器确保初始化 java中通过提供构造器,可确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,那java会在用户操作对象之前自动调用相应的构造器,从而保证初始化的进行。 构造器的名称必须与类名完全相同。避免与成员名称相冲突,也方便编译器知道调用哪个方法。不接受任何参数的构造器叫做默认构造器,也成为无参构造器。也可以使用带有形式参数的构造器:public class原创 2017-03-18 17:56:38 · 315 阅读 · 0 评论 -
java基础学习(五)访问权限控制
java提供的访问权限控制的等级,从最大权限到最小权限依次为:public、protected、包访问权限(没有关键字)、private。这几个访问权限修饰词在使用时,是置于类中每个成员的定义之前的。无论它是一个方法还是一个域。每个访问权限修饰词仅控制它所修饰的特定定义的访问权。1、包访问权限(没有关键字) 如果不提供任何访问修饰词,意味着它是“包访问权限”。当前的包中的所有其他类对那个成员都有访原创 2017-03-19 12:10:52 · 502 阅读 · 0 评论 -
java基础学习(二)操作符
java几乎所有的操作符都只能操作 基本类型,例外的操作符是”=”、”==”和”!=”,这些操作符能操作所有的对象。 String类支持”+”和”+=”。当编译器看到一个String后面紧跟一个”+”,而这个”+”后面又紧跟一个非String类型的元素时,就会尝试将这个非String类型的元素转换为String。但是如果是在String前面,则不会转换,会正常的运算。public static v原创 2017-03-11 17:02:05 · 390 阅读 · 0 评论 -
java基础学习(八)接口
一、抽象类和抽象方法 抽象类是介于普通类与接口之间的一种通用接口。抽象类的目的是通过这个通用接口操作一系列的类,创建抽象类的实体对象几乎没有任何意义。抽象类可以阻止使用者实例化该类。抽象方法:仅有声明而没有方法体。 包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的,否则,编译器就会报错。 正确的方式:public abstract class In原创 2017-04-08 16:07:28 · 326 阅读 · 0 评论 -
java基础学习(七)多态
多态是继封装和继承之后的面向对象程序设计语言的第三者基本特征。封装通过合并特征和行为来创建新的数据类型。继承允许将多种类型(从同一基类导出的)视为同一类型来处理多态也称作动态绑定、后期绑定、运行时绑定,它的作用就是消除类型之间的耦合关系。对象既可以作为它自己本身的类型使用,也可以作为它的基类型使用。 把对某个对象的引用视为对其基类型的引用,称为向上转型。 例如:Animal ca原创 2017-03-26 17:46:00 · 267 阅读 · 0 评论 -
java基础学习(六)组合与继承
使用组合和继承,可以利用现有类型生成新类型来复用代码,而不必再从头开始编写,能够达到使用类而不破坏现有程序代码。一、组合 只需在新的类中产生现有类的对象,新的类是由这些现有类的对象所组成,只是复用了现有程序代码的功能,而非它的形式。 只需将对象引用置于新类中即可。对于非基本类型的对象,必须将其引用置于新的类中;但是可以直接定义基本类型数据。public class Springkler {//原创 2017-03-25 17:19:50 · 426 阅读 · 0 评论 -
java基础学习(十)容器-1
java原创 2017-04-30 12:02:25 · 212 阅读 · 0 评论 -
java基础学习(11)字符串
1、不可变String String对象是不可变的。public static String upcast(String s){ return s.toUpperCase(); } public static void main(String[] args) { //string对象不可变,q是对象的引用 String q="abcde原创 2017-04-30 16:22:04 · 330 阅读 · 0 评论 -
java基础学习(12)容器-2
填充容器public static void main(String[] args) { //复制相同的对象传递给List构造器 List<String> strList=new ArrayList<String>(Collections.nCopies(4,"Hello")); System.out.println(strList);原创 2017-05-06 10:39:08 · 158 阅读 · 0 评论 -
java基础学习(九)内部类
将一个类的定义放在另一个类的定义内部,这就是内部类。创建内部类,将类的定义置于外围类的里面。在静态和非静态方法中,创建内部类对象的引用的方式是不一样的:public class Parcel { //定义内部类 class Contents{ private int i=11; public int value(){return i;}原创 2017-04-15 14:52:33 · 308 阅读 · 0 评论 -
Enum枚举类
public enum TestEnum { //枚举写在最前面,赋值要都一起赋值, //这个声明定义的类型是一个类,它刚好有四个实例, UPDATE(1,"更新"),QUERY(2,"查询"),DELETE(3,"删除"); //通过括号赋值,必须带有一个构造器,和属性跟方法 private int enValue; private String enDesc原创 2017-06-12 22:01:05 · 363 阅读 · 0 评论 -
ThreadLocal的使用
ThreadLocal解决的是变量在不同线程间的隔离性,也就是不同线程拥有自己的值,不同线程中的值是可以放入ThreadLocal类中进行保存的。ThreadLocal,即线程变量,是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构被附带在线程上,也就是一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。可以通过set(T)方法来设置一个值,在当前线程原创 2018-03-13 21:48:05 · 376 阅读 · 0 评论