在开发过程中经常会使用```if...else...```进行判断抛出异常、分支处理等操作。这些```if...else...```充斥在代码中严重影响了代码代码的美观,这时我们可以利用Java的Function接口来消灭```if...else...```
冒泡排序十分简单,重复访问,依次比较进行交换,交换过多,比较相邻元素,大就交换,从第一对开始,到最后一对,一次排序后保证最大的位于末尾,重复n次。时间复杂度:O(n2),空间复杂度:O(1),稳定排序,原地排序javaprivatestaticvoidsort(intnums){intn=nums.length;for(inti=0;i<n1;i){for(intj=0;j<ni1;j){if(n
Lambda表达式遍历集合、Iterator遍历结合元素、Lambda表达式遍历Iterator、Foreach循环遍历集合元素、Predicate操作集合、Stream操作集合
继承是面向对象的三大特征之一,也是实现软件复用的重要手段,Java的继承具有单继承的特点即每个子类只有一个父类继承是实现类复用的重要手段,但继承带来了一个最大的坏处是破坏了封装,相比之下组合也是实现类复用的重要方式,而采用组合方式来实现类复用则能提供更好的封装性
java是面向对象的编程语言,但它提供了8中基本类型,这8种基本类型不支持面向对象的编程机制也不具备对象的特性,没有成员变量和方法可以调用;所有的引用类型都继承了Object类,都可以当成Object类型变量来使用,但这8种基本类型就不可以,如果某个方法需要的是Object类型的参数,但实际需要的值确实2,3等数值,就非常难处理为了解决类似的问题,Java提供了Wrapper Class的概念即*包装类*为8种基本类型分别定义了引用类型,并称为基本数据类型的包装类
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,
理解数组Java的数组要求所有的数组元素具有相同的数据类型,换句话说一个数组里只能存储一种数
顺序结构任何语言最常见的就是顺序结构,顺序结构就是程序按源码的顺序从上到下逐行执行,中间没有任何判断和跳转if分支语句if语句使用布尔表达式或者布尔值作为分支条件来进行分支控制,大致分为三种形式第一种形式if(logic expression){ statement...}public class IfTest{ public static void main(...
结构化程序设计主张按功能来分析需求,其主要原则是自顶而下、逐步求精、模块化等等,它首先采用结构化分析(Structured Analysis,SA)对系统进行需求分析,然后使用结构化设计(Structured Design,SD)进行概要设计、详细设计,最后采用结构化编程(Structured Program,SP)来实现系统。结构化程序设计主张按功能把软件系统逐步细分,因此也称为面向功能的程序...
面向对象是一种更优秀的的程序设计方法,它的基本思想是使用类、对象、继承、封装,消息等基本概念来进行程序设计。它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以现实世界中的事物(即对象)为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的类,作为系统的基本构成单元(而不是用一些与现实世界中的事物相关比较远,并...
Java使用构造器来对单个对象进行初始化操作,使用构造器先完成整个Java对象的状态初始化,然后将Java对象返回给程序,从而让该Java对象的信息更加完整,与构造器作用类似的是初始化块,它也可以对Java对象进行初始化。初始化块是Java类里克出现的第四种成员(成员变量,方法和构造器),一个类里有多个初始化块,相同类型的初始化块之间有顺序:先定义的初始化块先执行,后定义的后执行
不可变类(immutable)类的意思是创建该类的实例后,该实例的实例变量是不可改变的,java提供的8个包装类和java.lang.String类都是不可变类,当创建它们的实例后,其实例的实例变量不可改变
算数运算符,赋值运算符,比较运算符,逻辑运算符,位运算符,三目运算符...
安装JDK是学习Java开发的第一步,代码还是从实践中得来,实践从搭建环境开始
Java5增加泛型支持,很大程度上是为了让集合记住其元素的数据类型,在此之前不用泛型的话,一旦把一个对象放进Java集合中,集合就会忘记对象的类型,把所有的对象当成Object类型处理,从集合里取出对象后,还需要进行强制类型转换 增加了泛型支持后的集合,完全可以记住集合中元素的类型,并且在编译时检查集合中元素的类型,如果试图向集合中添加不满足类型要求的对象,编译器就会提示错误,增加泛型的集合让代码更简洁更健壮
所谓泛型,就是允许在定义类、接口、方法时使用类型形参,这个类型形参(或者叫泛型)将在声明变量、创建对象、调用方法时动态地指定(即传入实际的类型参数也可称为类型实参) Java5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持,从而可以在声明集合变量、创建集合对象时传入类型实参。
为了表示各种泛型List的父类,可以使用类型通配符(?),就是一个问号,将这个问号作为类型实参传给List集合,表示可以匹配任何元素类型,并且还可以给通配符进行上下限限制
数组元素的类型不能包含泛型变量或泛型形参,除非是无上限的类型通配符;但可以声明元素类型包含泛型变量或泛型形参的数组,也就是说可以声明List<String>形式的数组,但不能创建ArrayList<String>[10]这样的数组对象
Java5提供了泛型方法(Generic Method),所谓泛型方法,就是在声明方法时定义一个或多个泛型形参
程序主动使用某个类,一定会经过将类加载到内存,链接,初始化三个步骤,而这个步骤就是JVM完成的类加载或者叫做类初始化
当线程在系统内运行时,线程的调度具有一定的透明性,程序通常无法准确控制线程的轮换执行,但Java也提供了一些机制用于保证线程协调运行
Java使用ThreadGroup来表示线程组,它可以对一批线索进行分类管理,Java允许程序直接对线程组进行控制,而对线程组进行控制相当于直接控制组内的线程;用户创建的所有线程都属于指定线程组,如果程序没有限制的指定线程属于哪个线程组,则该线程属于默认线程组
系统启动一个新的线程需要与操作系统进行交互,往往消耗的成本比较高,在某些情况下,使用线程池可以很好的提升性能,尤其当成中需要创建大量生存期很短的的线程时,更应该考虑使用线程池
通过在反射中使用泛型,可以避免使用反射生成的对象需要强制类型转换
异常和测试岗位的理念紧密相关,所以关于异常应该好好说一说,实际上异常机制是判断一门编程语言是否程序的标准,主流的编程语言中都提供了健全的异常处理机制,请看清楚这里说的是处理机制,它可以使程序中的异常处理代码和正常业务代码分离,保证程序代码更加优雅的展现,而其本质是大大提高了程序的健壮性,反映到客户层面更多的感知就是稳定性
当一个类里包含的某些实例变量是敏感信息,这个时候不希望系统将该实例变量进行序列化,或者某个实例变量的类型是不可序列化的,因此不希望对该实例变量进行递归序列化,从而避免报java.io.NotSerializableException当对某个对象进行序列化时,系统会自动把该对象的所有实例变量依次进行序列化,如果某个实例变量引用到另一个对象,则被引用的对象也会被序列化,如果被引用的对象的实例变量引用了其他对象,则被应用的对象也会被序列化,这种情况称为递归序列化
在程序做反序列化之前,可以对序列化数据进行检查,从而确保反序列化后的数据唯一,如此可以保证程序更健壮且安全
序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以备以后重新恢复成原来的对象,序列化机制使得对象可以脱离程序的运行而独立存在
Java7之后提供了全面的文件IO和文件系统访问支持,并且还支持异步的Channel
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号