Java核心技术
文章平均质量分 74
qq_36120793
弱鸡 菜鸟 。
展开
-
Java(1-1)
1.根据java的语法规范,main方法必须声明为public,同时,java的main方法必须是静态地。由于java的所有函数都属于某个类的方法,所以main方法一定要有一个外壳类,最后和c/c++一样 void 代表无返回值,但是不同的是Main方法没有为操作系统返回“退出代码”。这是对于我们见到主函数的解释:public class ClassName{public static void原创 2017-09-19 15:29:38 · 486 阅读 · 0 评论 -
Java(7-2)
Part1:集合框架中的接口。 在图中(看不见的可能是空间图片无法上传,加我2923370475),我们可以看见,集合有两个基本接口:Collection和Map。由于Collection,我们可以用以下方法在集合插入元素:boolean add(E element) 不过,由于映射包含键/值对,所以要用put方法来插入:V put(K key,V value) 要从集合读取元素,可以用迭代器原创 2017-10-31 15:03:13 · 393 阅读 · 0 评论 -
Java(5-2)
接着上次没说完的异常来看。我们说,当代码抛出一个异常时,就会终止方法中剩余代码的处理,并退出这个方法的执行。 但是有一种情况,如果方法获得了一些本地资源,并且只有这个方法自己知道,并且这些资源在退出方法之前必须被回收,那么就存在一个资源回收的问题。 对于这个问题,Java提出了一个finally子句来解决问题: 不管是否有异常被捕获,finally子句中的代码都被执行。我们来看个例子:原创 2017-10-25 15:47:46 · 441 阅读 · 0 评论 -
Java(7-2 迭代器和链表详细说明)
下面几回我们会介绍具体的集合: 这一节我们主要说下集合框架中的链表(LinkedList)。 首先,在Java中,所有的链表实际上都是双向链表,即每个节点还存放着至向前驱结点的引用。下面是一个示例,我们会先添加三个元素,然后将第二个元素删除:List staff = new LinkedList;staff.add("Amy");staff.add("Bob");staff.ad原创 2017-11-01 01:31:41 · 977 阅读 · 0 评论 -
Java(3-5)
(一)对象包装器和自动装箱: 我们知道,java有八种基本类型,int,等等。但是很多方法是对对象进行操作地,比方说equals,这时候需要将int,这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。例如,Integer类对应的基本类型int。通常,这些类称为包装器(wrapper)。这些对象对象包装器类拥有很明显的名字:Integer(int),Long(long),Float(fl原创 2017-10-16 20:50:45 · 375 阅读 · 0 评论 -
Java(7-3)
Part1 7-2介绍的是集合中的集,现在我们要说一下关于集合的映射:Java类库为映射提供了两个通用的实现,HashMap和TreeMap。这两个类都实现了Map接口。 散列映射对建进行散列,树映射用键的整体顺序对元素进行排序,并将其组织成搜索树。散列和比较函数只能用于键 ,与键关联的值不能进行散列或比较。Tips: 每当往映射中添加元素对象时,必须提供一个键值。 每当想要检原创 2017-11-02 15:00:06 · 536 阅读 · 0 评论 -
Java(7-4)
集合的最后一回了,这次要说说视图和包装器,说实话,视图还好说,我知道他们可以对进程的同步,映射部分内容的承接(keySet返回一个实现Set接口的包含键的类,方便我们从键的角度对原映射进行操作。),但是包装器能干什么呢?我们先看看这个。Part1 轻量级集合包装器 实例:Arrays类的静态方法asList将返回一个包装了普通Java数组的List包装器。这个方法可以将数组转化成一个列表或集合参数原创 2017-11-02 22:36:13 · 330 阅读 · 0 评论 -
Java(6-1)
从c++开始,就有泛型概念的讲解了,本回中,我们将谈论一些关于Java的泛型问题。简单说,泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。我们拿ArrayList来举例,在泛型出现之前,ArrayList类只维护一个Object引用的数组。这样子就有两个问题,当获取一个值的时候,必须进行强制转换。ArrayList files = new ArrayList();...St原创 2017-10-25 17:13:37 · 262 阅读 · 0 评论 -
Java(8-4)多线程各种细节问题1
上一次我们介绍了Volatile,监视器还有synchronized锁关键字的使用。这一次我们要说下关于final在多线程的作用,原子性的使用,死锁以及Java中的应对方案,线程的局部变量 和 读写锁的介绍 。 Part 1 关于final变量在多线程的使用我们如今已经了解到,除非使用锁或volatile修饰符,否则无法从多个线程安全地读取一个域。 但是还有一种情况可以安全的访问一个共享域,原创 2017-11-28 15:28:35 · 242 阅读 · 0 评论 -
Java(8-1)
不知道多久了,这次该说多线程了。 Part 1如何设置一个多线程: ①将任务代码移到实现了Runnable接口的类的run方法中。这个接口非常简单,只有一个方法:public interface Runnable{ void run();}//这里由于Runnable是一个函数式接口,所以我们可以使用lambda表达式。//当然,现在来说公司中用的更多地是匿名类来实现这个②由Ru原创 2017-11-19 21:32:26 · 235 阅读 · 0 评论 -
Java(8-1-x)
我们上次介绍了关于线程的创建和使用,并解释了只要有sleep就要捕获错误的原因。这一次,我们需要介绍一些建成的理论知识,可能有些枯燥,但确实必要。Part 1 线程的状态:线程的状态有6种,(1)New,新创建;(2)Runnable,可运行;(3)Blocked,被阻塞;(4)Waiting,等待;(5)Timed waiting,计时等待;(6)Terminated,被终止,如果我们要确定一个线原创 2017-11-21 22:06:11 · 206 阅读 · 0 评论 -
Java(8-2)多线程的同步和条件对象
这一节,我们要一口气介绍完多线程同步和条件对象的原因,锁机制,条件对象的使用以及我们之前写的那个银行转钱系统的剩余代码 。 Part 1 同步 为什么要有同步呢? 我们从之前多线程的一个例子来看:有很多用户都分别在进行交易,假若其中一个线程,在正在进行存钱操作,但是还未结束的时候,它在CPU的时间片就已经用完了,这个线程被中断了!而他还没把存的钱写入记录!却转而去运行其他线程了,等下一次他的原创 2017-11-25 22:16:16 · 332 阅读 · 0 评论 -
Java(8-3 01)多线程同步
上一次,我们说了关于同步和条件对象的使用原因和使用方法,这一次,我们接着上回的问题来说,这一节,我们将会讨论关于synchronized关键字的作用和用法,同步阻塞的用法,监视器的概念,以及Volatile域的作用,使用原因和用法。Part 1 synchronized关键字先回顾下上一节,我们知道了锁对象的使用,以及在线程进入锁对象后,如何用条件对象处理那些暂时还不能运行的代码。Java的这种机制原创 2017-11-27 11:00:54 · 268 阅读 · 0 评论 -
Java(8-5)阻塞队列与线程安全集合
上一次,我们讨论了java多线程的一些细节问题,包括死锁,读写锁等等。这一节,我们要介绍关于阻塞队列以及如何使用并且操作线程安全的集合 。 Part 1 阻塞队列对于许多线程问题,可以通过一个或多个队列以优雅且安全的方式将其形式化。想一下,生产者线程向队列插入元素,消费者线程取出他们。使用队列可以安全地从一个线程向另一个线程传递数据。例如,我们从银行转账,转账线程将转账转账指令对象(命令模式?) 插原创 2017-12-06 20:22:11 · 877 阅读 · 0 评论 -
Java(9-1)输入与输出(一)
我们将会介绍如何在JAVA中进行输入和输出操作。part 1 大体介绍输入输出流 在JavaAPI中,可以从其中读入一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称为输出流。这些字节序列的来源和目的地可以是文件,也可以是网络连接,甚至内存块。**抽象类!**InputStream 和 OutputStream 构成了输入和输出各类层次的基础。part 2.1 读写字节虚原创 2017-12-17 16:23:01 · 327 阅读 · 0 评论 -
Java(5-1)
这回我们来说说Java的异常: 我们用一个图来开始: 可以发现,所有的异常都是由Throwable继承而来的,下面分为了Error和Exception。其中Error类曾是结构描述了额Java运行时系统的内部错误和资源耗尽错误。这种错误程序员无能为力,不管了。所以我们需要关注的是Exception层次的错误,派生与RuntimeException的异常包含以下几种情况: 1)错误原创 2017-10-24 15:26:57 · 319 阅读 · 0 评论 -
Java(4-4)
这一节看内部类: 1.首先是概念和介绍: 内部类就是定义在另一个类中的类但是为什么我们引入这个概念呢?如下三点: 1.内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据 2.内部类可以对同一个包中的其他类隐藏起来 3.当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷现在我们通过一个简单的例子来认识内部类:分析TimerTest示例,并抽象出一个TalkingC原创 2017-10-23 13:37:16 · 286 阅读 · 0 评论 -
Java(2-1)
1.对象与对象变量: ① 要想适用对象,就首先必须构造对象,并指定其初始状态。 ② 下面的表达式构造了一个新对象。这个对象被初始化为当前的日期和时间。 new Date() 通常,希望构造的对象可以多次使用,因此,需要将对象存放到一个变量中,如下: String s = new Date().toString();其中 s 为对象变量,一定要认识到:一个对象变量并没有实原创 2017-09-28 01:24:50 · 222 阅读 · 0 评论 -
Java(2-2)
①自定义类: Tips: 强烈建议将实力域标记为private。java的构造器方法和c++一样。但是要记住所有的java对象都是在堆中构造地,构造器总是伴随着new操作符一起使用Employee number007("James Bond",10000,1950,1);上面这条语句在c++中可以运行,但在java中不行。不要在构造域中出现与实例域重名的局部变量在java中,所有的方法都必须是在原创 2017-09-28 15:49:17 · 227 阅读 · 0 评论 -
Java (1-2)
1.字符串:从概念上讲,Java字符串就是Unicode字符序列。java没有内置字符串,而是在库中提供了一个预定义的类,叫String。下面介绍相关API: ①字串 String类的substring方法可以从较大的字符串中提取出一个字串。String greeting = "hello"String s = greet.substring(0,3);这将创建一个由字符“Hel”组成的字符串原创 2017-09-21 11:59:37 · 287 阅读 · 0 评论 -
Java(1-3)
①构建字符串(注意和字符串的对比学习) 有时候,需要由较短的字符串构建字符串,例如,按键或来自文件中的单词。采用字符串连接的方式达到此目的效率比较低。每次连接字符串,都会构建一个新的字符串String对象,真是浪费!在以前可是会被打死的!现在,使用StringBulider就可以避免这个问题。 如果需要许多小段的字符串构建一个字符串,那么应该按照下列步骤进行。首先,我们构建一个空的字符串构建器:原创 2017-09-21 17:39:41 · 421 阅读 · 0 评论 -
Java(4-1)
(一)本章概述: 1. 接口的概念:接口不是类,而是对类的一组需求描述,描述类具体有什么功能,而并不给出每个功能的具体实现。 一个类可以实现一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。 2. lambda表达式的概念:这是一种表示可以在将来某个时间点执行的代码块的简介方法。 使用lambda表达式可以用一种精巧而简洁的方式表示毁掉或变量行为的代码原创 2017-10-17 21:15:46 · 235 阅读 · 0 评论 -
Java(1-4)
①控制流程 1.c++中允许局部变量覆盖:public static void main(){ int n ; { int n; int m; //但是java不允许,这样可能导致程序出错 }}2.在循环中,检测两个浮点数是否相等需要格外小心。for(double x = 0; x != 10;x += 0.1)上面的循环可能永远不会结束。原创 2017-09-22 17:28:11 · 331 阅读 · 0 评论 -
java(3-1)
①类、超类和子类: 在java中与c++定义继承类得到方式十分相似。java用关键字extends代替了c++中的冒号(:)。在java中所有继承都是公有继承,而没有c++中的私有继承和保护继承。在Java中对于已存在的类称为超类(superclass)、基类或父类;新类称为子类,派生类或孩子类。子类的方法不能直接访问父类的私有域。对此我们可以通过调用超类的get方法。例如:public doub原创 2017-10-02 18:09:24 · 387 阅读 · 0 评论 -
Java(3-2)
①抽象类: 为什么花费精力去进行高层次的抽象呢?因为诸如学生、雇员都有姓名属性,因此可以将getName方法放置在位于继承关系较高层次的通用超类中。在超类中的方法如果有abstract关键字,就完全不需要实现这个方法了。为了提高程序的清晰度,包含一个或多个抽象方法的类本身必须被声明为抽象。 除了抽象方法之外,抽象类还可以包括具体数据和具体方法。 这里建议尽量将通用的域或者方法(不管是否原创 2017-10-02 22:34:17 · 356 阅读 · 0 评论 -
Java(6-2)
我们上回,对泛型类,方法,应用有了一个基本的认识,这回我们来说说泛型和虚拟机:Part1:类型擦除 无论何时定义一个泛型类型,都自动提供了一个相应的原始类型。原始 类型的名字就是删去类型参数后的泛型类型名。擦除类型变量,并替换为限定类型(无限定的变量用Object)当程序调用泛型方法时,如果擦除返回类型,编译器插入强制类型转换。例如下面的语句:Pair<Employee> buddies = ..原创 2017-10-26 15:08:23 · 286 阅读 · 0 评论 -
Java(4-2)
这次主要探讨下lambda表达式:增加lambda表达式地原因:将一个代码块传递到某个对象(我想到了匿名),不用再在类中声明相关代码块,可以直接类似函数式的来用。什么是lambda表达式呢?,像这样,(String first,String second)->first.length() - second.length(),就是一个lambda表达式。lambda就是一个代码块,以及必须传入代码的变原创 2017-10-19 21:03:03 · 262 阅读 · 0 评论 -
Java(3-3)
①hashCode: 散列码(hashcode)是由对象导出的一个整型值。散列码是没有规律的。如果x和y是两个不同的对象,x.hashcode()和y.hashcode()基本上不会相同。原创 2017-10-06 00:22:27 · 260 阅读 · 0 评论 -
Java(3-4)
①泛型数组列表 在很多程序语言中,尤其c语言中,必须在编译时就确定数组的大小。这往往会造成不必要的空间浪费,一旦确定了数组大小,就很难再改变了。针对这一点,java中使用一个在Java中被称为ArrayList的类。它使用起来有点像数组,但在添加或删除元素时,具有自动调节数组容量的功能,而不需要为此编写任何代码。 ArrayList是一个采用类型参数的泛型类。为了指定数组列表保存的元素对象类型,原创 2017-10-06 16:34:50 · 322 阅读 · 0 评论 -
Java(4-3)
在4-2中已经知道了如何生成lambda表达式,以及如何把lambda表达式传递到需要一个函数。下面看看如何编写方法处理lambda表达式:使用lambda表达式的重点在于延迟执行。这可能有很多原因:也许你想多次运行这部分代码,也许是你只想在必要的时候执行这些代码,也许是你想在算法的适当位置运行代码,等等。我们来看一个例子:假设你想重复一个动作n次。将这个动作和重复次数传递到一个repeat方法:r原创 2017-10-20 22:53:45 · 407 阅读 · 0 评论 -
Java(7-1)
今天开始,要说Java内,非常重要的一个东西,就是集合,java著名的集合框架。Part1:将Java集合框架的接口和类库分开! 我们来举一个关于队列接口,Queue的例子: 队列接口的最简单形式可能是这样:public interface Queue<E>{ void add(E element); E remove(); int size();}那我们就可以通过I原创 2017-10-30 15:31:24 · 354 阅读 · 0 评论 -
Java(9-1)输入与输出(二)
上节我们关注了 文本形式的读入和写出的操作(UTF-8编码)。 这回,我们要看看在Java中如何对文件以 010101 二进制的形式 来进行读写 。Part 1.1 DataInput 和 DataOutput接口的介绍DataOutput接口中定义了用二进制格式读取,数组、字符、boolean值和字符串的方法; 例如,writeInt总是将一个正数写出为4字节的二进制数量值,而不管他有多少位转载 2017-12-18 00:58:52 · 215 阅读 · 0 评论