![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
jxq1994
你若不离不弃,我必同归于尽
欢迎关注简书:https://www.jianshu.com/u/b8d2aee8cd4c
新的内容将在简书更新
展开
-
抽象内部类
1.抽象类Java abstract类在《Java核心技术》中的描述是:1、Abstract methods act as placeholders for methods that are implemented in the subclasses.2、Abstract class cannot be instantiated.第一点解释,好比 人和职员,职员是人的子类,每个职员都有其姓名、性别...转载 2018-05-04 13:36:55 · 3092 阅读 · 0 评论 -
Java基础之(三十六)Java异常处理<二>
使用throw抛出异常当程序出现错误时,系统会自动抛出异常;除此之外,Java也允许程序自行抛出异常,自行抛出异常使用throw语句完成。到目前为止,你只是获取了被Java运行时系统抛出的异常。然而,程序可以用throw语句抛出明确的异常。Throw语句的通常形式如下: throw ThrowableInstance;这里,ThrowableInstance一定是Throwable类类型或Throw原创 2016-08-23 21:42:46 · 423 阅读 · 0 评论 -
Java基础之(三十六)Java异常处理<一>
说明 异常(exception)是在运行时代码序列中产生一种异常情况。换句话说,异常是一个运行时错误。在不支持异常处理的计算机语言中,错误必须被手工的检查和处理——典型的是通过错误代码的运用等等。这种方法既很笨拙也很麻烦。Java的异常处理避免了这些问题,而且在处理过程中,把运行时错误的管理带到了面向对象的世界。一、异常处理基础Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象。当原创 2016-08-22 16:50:27 · 364 阅读 · 0 评论 -
Java基础之(十九)抽象类
说明 在自上而下的继承层次结构中,位于上层的类更具有通用性,甚至可能更加抽象。从某种角度看,祖先类更加通用,它只包含一些最基本的成员,人们只将它作为派生其他类的基类,而不会用来创建对象。甚至,你可以只给出方法的定义而不实现,由子类根据具体需求来具体实现。这种只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有“{}”。包含一个或多个抽象方法的类也必须被声明原创 2016-08-10 21:36:55 · 973 阅读 · 0 评论 -
Java 基础之(六) final关键字
Java中的final关键字非常重要,它可以应用于类、方法以及变量。 由于语境(应用环境)不同, final 关键字的含义可能会稍微产生一些差异。但它最一般的意思就是声明“这个东西不能改变”。之所以要禁止改变,可能是考虑到两方面的因素:设计或效率。 由于这两个原因颇有些区别,所以也许会造成 final 关键字的误用。 接下来,我们将讨论 final 关键字的三种应用场合:变量、方法以及类。 1原创 2016-07-16 13:55:26 · 488 阅读 · 0 评论 -
Java基础之(十八)equals方法
说明 Java程序中测试两个变量是否相等有两种方式:一种是利用==运算符;一种是利用equals函数。==运算符当使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型,则只要两个变量的值相等,就将返回true.但对于两个引用变量,它们必须指向同一个对象时,==判断才会返回true。==不可用于比较类型上没有父子关系的两个对象。下面程序示范了使用==来判断两种类型变量是否相等原创 2016-08-10 11:29:33 · 606 阅读 · 0 评论 -
Java基础之(二) 类与对象
一、类 标准的命名规则为:类名是以大写字母开头的名词。若名字由多个单词组成,每个单词的第一个字母都应该大写。 class Person{ int age; void shout(){ System.out.println(“oh my god!i’m”+ age); } } age是类的属性,也叫类成员变量; shout是类的方法,也叫类成员函数; 问题:一个类中可不可以有2个公原创 2016-07-02 17:38:49 · 614 阅读 · 0 评论 -
Java基础之(十五)隐藏和封装
说明 在前面的程序中经常出现通过某个对象直接访问其Field(成员变量)的情形,这可能引起一些潜在的问题。比如我们给某个Person类中的age成员变量赋值为1000,这在语法上来说是合法的,但是违背了现实。因此,Java程序推荐将类和对象的Field进行封装。理解封装封装是面向对象三大特征之一(其他两个是继承和多态),它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而原创 2016-08-06 14:29:18 · 547 阅读 · 0 评论 -
Java中的值传递
说明 Java里方法的参数传递方式只有一种:值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。Java中使用值传递的方式将实参传递给方法。传递基本数据类型变量的值与传递数组值会有很大的不同。对于基本数据类型参数,传递的是实参的值。对于数组类型变量,参数值是数组的引用,给方法传递的也是这个引用。方法中的数组和传递的数组是同一个数组,因此改变方法中的数组,原创 2016-07-27 10:44:17 · 423 阅读 · 0 评论 -
Java对象初始化顺序
先看一道面试题: class A { static{ System.out.println("AC"); } A(){ System.out.println("A"); fun1(); } void fun1(){原创 2016-08-09 11:15:43 · 425 阅读 · 0 评论 -
Java基础之(三十五)输入输出<三>
上一节我们介绍了输入/输出流的四个抽象基类,并介绍了访问文件节点流的用法,通过上面四个抽象基类使用起来有些繁琐,这就需要借助于处理流了。处理流的用法下图显示了处理流的功能,它可以隐藏底层设备上节点流的差异,并对外提供更加方便的输入/输出方法,让程序员只需关注高级流的操作。 因此我们使用处理流时的典型思路是:使用处理流来包装节点流,程序通过处理流来实现输入/输出功能,让节点流与底层的I/O设备、文件原创 2016-08-20 15:01:03 · 360 阅读 · 0 评论 -
Java基础之(二十一)接口与抽象类
说明 类是对象的模板,抽象类和接口可以看做是具体的类的模板。由于从某种角度讲,接口是一种特殊的抽象类,它们的渊源颇深,有很大的相似之处,所以在选择使用谁的问题上很容易迷糊。我们首先分析它们具有的相同点。 都代表类树形结构的抽象层。在使用引用变量时,尽量使用类结构的抽象层,使方法的定义和实现分离,这样做对于代码有松散耦合的好处。都不能被实例化。它们都位于继承树的顶端,用于被其他·类实现和继承。原创 2016-08-12 14:50:30 · 313 阅读 · 0 评论 -
Java基础之(二十)接口
说明 现实中也有很多接口的实例,比如说USB接口、串口电脑硬盘,Serial ATA委员会指定了Serial ATA 2.0规范,这种规范就是接口。Serial ATA委员会不负责生产硬盘,只是指定通用的规范。希捷、日立、三星等生产厂家会按照规范生产符合接口的硬盘,这些硬盘就可以实现通用化,如果正在用一块160G日立的串口硬盘,现在要升级了,可以购买一块320G的希捷串口硬盘,安装上去就可以继续使原创 2016-08-11 21:41:33 · 881 阅读 · 1 评论 -
Java基础之(三十七)Java多线程编程<一>
说明 几乎所有的操作系统都支持同时运行多个任务,一个任务就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。线程和进程一个操作系统里可以有多个进程,而一个进程里可以有多个线程。进程几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对应一个进程(Process)。当一个程序进入内存运行后,即变成一个进程。进程是出于运行过程中的原创 2016-08-24 13:26:38 · 518 阅读 · 0 评论 -
Java数组的几种常用操作方法(排序算法及查找)
数组的查找查找是在数组中寻找特定元素的过程。线性查找法线性查找法将要查找的关键字key与数组中的元素逐个进行比较。如果匹配成功,线性查找法则返回与关键字匹配的元素在数组中的下标;如果没有匹配成功,则返回-1。下面给出线性查找法的程序:private static int LinearSearch(int[] list,int key) { // TODO A...原创 2016-07-27 18:36:02 · 8673 阅读 · 0 评论 -
Java 中的 wait(), notify ()和 notifyAll ()
在 Java 中,wait、notify 和 notifyAll 通常用来实现线程间的通信。如果一个线程想要告诉另一个线程某些事情,就可以使用java.lang.Object中的notify()和notifyAll()方法。wait()和notify()方法的典型实例就是经典的生产者-消费者设计模式,一条线程即生产者生产数据并将数据放入共享的“篮子”中,那么生产者可以通知另一条线程即消费者,让消费者转载 2016-10-10 19:20:54 · 484 阅读 · 0 评论 -
Java基础之(三十四)操作集合的工具类:collections
说明 Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序、查询和修改等操作,还提供了将集合对象置为不可变、对集合对象实现同步控制等方法。排序操作collections提供了如下几个方法用于对List集合元素进行排序: static void reverse(List原创 2016-08-26 19:41:18 · 2238 阅读 · 0 评论 -
Java基础之(三十一)List集合
说明 List集合代表一个有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合默认按元素的添加顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1……List 接口和 Listlterator 接口List是Colection接口的子接口,可以使用Colection借口的全部方法。List是有序集合,还提供了一些 根据索引来操作集合元素的方法: voi原创 2016-08-17 22:25:36 · 820 阅读 · 0 评论 -
Java基础之(二十五)hashCode() 与 toString()
我们在程序中输入任意长度的二进制数据,通过hash算法就能产生对应的唯一的散列值。 hash算法的另一个作用是存储数据,假设我们要存储四个数据,通过hash算法,我们为每个数据产生一个不同的散列值,然后我们把散列值和数据存储的位置建立一种关联。因此,当你下次想要找到某个数据时,只需要知道hash值就知道了它存储的位置。散列值我们可以理解为房子上的门牌号,我们想要找某个人,知道了门牌号就可以找到。说原创 2016-08-15 11:41:42 · 2366 阅读 · 0 评论 -
Java基础之(二十四)枚举类
说明 在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有四个对象(春夏秋冬);再比如行星类,目前只有九个对象。这种实例有限而且固定的类就被称之为枚举类。手动实现枚举类如果需要手动实现枚举类,可以采用如下设计方式:通过private将构造器隐藏起来把这个类的所有可能实例都用public static final 修饰的类变量来保存如果有必要,可以提供一些静态方法,允许其他程序根据特原创 2016-08-14 12:44:42 · 642 阅读 · 0 评论 -
Java基础之(三十七)Java多线程编程<三>
线程的同步多线程编程容易突然出现错误,这是因为系统的线程调度具有一定的随机性,也说明了编程不当。在使用多线程的时候,必须要保证线程安全。线程安全当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用。达到此目的的过程叫做同步(synchronization)。多线程共用一份资源时容易出现错误,看如下例子:class TestThread implements Runn原创 2016-08-25 19:59:23 · 495 阅读 · 0 评论 -
Java基础之(二十三)闭包与回调
闭包(Closure)是一种能被调用对象,它保存了创建它的作用域的信息。Java并不能显式地支持闭包,但对于非静态内部类而言,它不仅记录了其外部类的详细信息,还保留了一个创建非静态内部类对象的引用,并且可以直接调用外部类的private成员,因此可以把非静态内部类当成面向对象领域的闭包。通过这种仿闭包的非静态内部类,可以很方便地实现回调功能,回调就是某个方法一旦获得了内部类对象的引用后,就可以在合适原创 2016-08-14 11:56:37 · 420 阅读 · 0 评论 -
Java基础之(二十二)内部类
说明 在 Java 中,允许在一个类(或方法、语句块)的内部定义另一个类,称为内部类(Inner Class),有时也称为嵌套类(Nested Class)。包含内部类的类也被称为外部类(Outer Class),或者宿主类(Hast Class)。内部类和外层封装它的类之间存在逻辑上的所属关系,一般只用在定义它的类或语句块之内,实现一些没有通用意义的功能逻辑,在外部引用它时必须给出完整的名称。非原创 2016-08-12 22:29:07 · 586 阅读 · 0 评论 -
Java基础之(三十七)Java多线程编程<二>
控制线程join线程Thread提供了一个线程等待另一个线程完成的方法:join方法。当在某个程序执行流中调用其他线程的join方法,调用join方法的那个线程将被阻塞,直到被join方法加入的join线程完成为止。join方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题配一个线程,当所有的小问题得到处理后,再调用主线程来进一步操作。例:class JoinThread impl原创 2016-08-25 13:32:06 · 694 阅读 · 1 评论 -
Java基础之(十七)继承和组合
说明 继承是实现类重用的重要方法,但继承带来了一个最大的坏处:破坏封装。使用继承的注意点为了保证父类有良好的封装性,不会被子类随意改变,设计父类应当遵循以下规则:尽量隐藏父类的内部数据。尽量把父类的所有的成员变量都设为private访问类型,不要让子类直接访问父类的成员变量。不要让子类可以随意访问、修改父类的方法。父类中的工具方法应当使用private访问控制符修饰,让子类无法访问该方法;如果原创 2016-08-08 14:29:09 · 381 阅读 · 0 评论 -
Java基础之(三十五)输入输出<二>
上一节的内容是读取很小的文件,这一节为大家介绍大文件的读写方法以及字符流的使用方法。大文件的输入输出InputStream将输入数据抽象成如图所示的水管,所以程序既可以通过read()方法每次读取一个”水滴“,也可以通过read(byte[] b)或read(char[] c)每次读取多个“水滴”。当使用数组作为read()的参数时,我们可以理解为使用一个“竹筒”到如图所示的水管中去取水,程序每次调原创 2016-08-19 20:59:40 · 370 阅读 · 0 评论 -
Java基础之(三十五)输入输出<一>
说明 输入输出(I/O)是指程序与外部设备或其他计算机进行交互的操作。几乎所有的程序都具有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等。通过输入和输出操作可以从外界接收信息,或者是把信息传递给外界。Java把这些输入与输出操作用流来实现,通过统一的接口来表示,从而使程序设计更为简单。 Java的IO流是实现输入输出的基础,它可以方便地实现数据的输入/输出操作,jav原创 2016-08-19 16:42:41 · 618 阅读 · 0 评论 -
Java基础之(二十八)String、StringBuffer和StringBuilder类
说明 字符串是一连串的字符序列,Java提供了String和StringBuffer两个类来封装字符串,并提供了系列方法来操作字符串对象。String类是不可变类,即一旦一个String对象呗创建以后,包含在这个对象的字符串序列是不可改变的,直至这个对象被销毁。StringBuffer对象则代表一个字符串序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的原创 2016-08-16 16:10:12 · 426 阅读 · 0 评论 -
Java基础之(二十七)clone()方法
说明 Java提供了一个projected修饰的clone()方法,该方法用来实现对象的“自我克隆”,即得到当前对象的一个副本,并且两个对象之间完全隔离。需要注意的是,由于该方法使用projected修饰,因此该方法只能被子类重写或者调用。自定义类实现克隆的步骤如下:首先自定义类需要实现Cloneable接口,该接口只是一个标记性接口(接口中没有定义任何方法),表明实现该接口的类可以实现“自身复原创 2016-08-16 15:37:56 · 403 阅读 · 0 评论 -
Java基础之(二十六)对象与垃圾回收
说明 当程序创建对象、数组等引用类型实体时,系统会在堆内存中为之分配一块内存用以保存对象,当这块内存不再被任何引用变量引用时,这块内存就变成垃圾,等待垃圾回收机制回收。垃圾回收机制只回收堆内存中的对象,不会回收任何物理资源(数据库连接、网络IO等资源)当对象永久性的失去引用后,系统就会在合适的时候回收掉它所占的内存在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法原创 2016-08-16 14:47:00 · 751 阅读 · 0 评论 -
Java 基础之(十一)一维数组(补充)
数组的复制在程序中,经常需要复制一个数组或一个数组的一部分。这种情况下可能要去尝试用赋值语句(=),如下所示:int[] a = {1,3,5,7};int[] b = new int[5];b = a;该语句并不能将a引用的数组内容复制给b,而只是将a的引用值复制给了b。在赋值语句之后,a和b都将指向同一个数组,即a引用所指向的数组。b原本指向的数组不能再被引用,就变成了垃圾,将被系统回收。在原创 2016-07-26 22:30:05 · 457 阅读 · 0 评论 -
Java 基础之(七) 继承
说明继承是Java语言中四大特性之一,其余三大特性包括封装、抽象和多态。 在面向对象程序设计中,可以从已有的类派生出新类。这称作继承。在java中使用extends关键字来表示继承关系。举个简单的例子:class Person { int age; String name; void eat(){ System.out.println("吃饭");原创 2016-07-16 18:05:10 · 450 阅读 · 0 评论 -
Java基础之(五)Static关键字
说明 Static 关键字是在编写代码的时候遇到的较难以理解的一个知识点 ,面试官也喜欢提这方面的问题。比如说主函数main的写法:public static void main(String[] args){} 这里为什么要用static呢?稍后再解答这个问题。1. 静态变量static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。 按照是否原创 2016-07-15 21:39:28 · 443 阅读 · 0 评论 -
Java 基础之(十一)一维数组
说明 数组是编程语言中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常可通过数组元素的索引来访问数组元素,包括为数组元素赋值和取出数组元素的值。数组也是一种数据类型,它本身是一种引用类型。Java的数组要求所有的数组元素具有相同的数据类型,包括基本数据类型和引用数据类型。一旦数组的初始化完成,数组在内存中所占的空间也被固定下来,因此数组的长度将不可改变。即使把某个数组元素的原创 2016-07-24 21:13:44 · 389 阅读 · 0 评论 -
Java基础之(三) 函数
一、函数的重载 Java允许重载任何方法,而不只是构造器方法。 二、构造函数 构造函数的特点: (1)构造函数与类同名。 (2)每个类可以有一个以上的构造函数。 (3)构造函数可以有一个0个、1个或多个参数。 (4)构造函数没有返回值。 (5)构造函数总是伴随着new操作符的执行被调用。构造函数的作用: 1.生成类的对象; 2.为成员变量赋初始值;如果在编写一个类时没有编写构原创 2016-07-02 21:33:56 · 351 阅读 · 0 评论 -
Java基础之(四) this的用法
一、使用this调用成员变量和成员函数 当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量。this指代的是调用函数的对象本身。public class Person { String name; void talk(String name){ System.out.println("my name is "+ this.name);}publ原创 2016-07-02 22:33:47 · 395 阅读 · 0 评论 -
表达式转型注意事项
转载自: http://www.cnblogs.com/bokeofzp/p/4745681.html1.java中表达式转型需要注意实例如下:byte b1=1,b2=2,b3,b6;final byte b4=4,b5=6;b6=b4+b5;b3=(b1+b2);System.out.println(b3+b6);问会出现什么状况: A、输出结果:13, B、b6=b4+b5 编译转载 2016-07-16 14:13:21 · 384 阅读 · 0 评论 -
Java基础之(二十九)Java集合类
说明 Java集合类是一个特别有用的的工具类,他可以用于存储数量不等的多个对象。并可以实现常用的数据结构,如栈、队列等。除此之外,Java集合还可以用于保存具有映射关系的关系数组。Java集合大致可分为:Set、List、Map三种体系, 其中Set代表无序、不可重读的集合; List代表有序、重复的集合; 而Map则代表具有映射关系的集合。 后来又增加的Queue体系集合,代表一中队列集原创 2016-08-16 22:35:14 · 370 阅读 · 0 评论 -
Java基础之(三十)Set集合
说明 Set集合,类似于一个罐子,程序依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。**Set集合与Collection基本相同,没有提供额外的方法。实际上Set就是Collection,只是行为略有不同(**Set不允许包含重复元素)。Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素原创 2016-08-17 15:41:33 · 523 阅读 · 0 评论 -
Java基础之(十三)递归方法和方法重载
递归方法说明 一个方法体内调用它自身,这样的方法我们称之为方法递归。方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。例如有如下这道数学题。已知有一个数列:f(0) = 1, f(1) = 4, f(n+2) = 2*f(n+1)=f(n); 其中,n是大于0的整数,求f(10) 的值。下面程序将定义一个fn方法用于计算f(10) 的值。public class Re原创 2016-08-05 18:52:52 · 1408 阅读 · 0 评论