Java基础
有恒者Maggie
算法基础 Java开发
展开
-
java中的类型转换
基本类型和抽象类型的类型转换是不同的,基本类型的转换会改变内存中的数据;抽象类型并不对对象本身做更改,而是改变可见性。基本类型转换自动类型转换(隐式类型转换)这是由系统自动完成的类型转换,由JVM自动完成。转换规则是对类型进行提升,也可以说是从存储范围小的类型转换到到存储范围大的类型:byte->short/char->int->long->float->dou原创 2012-08-31 00:43:37 · 1073 阅读 · 0 评论 -
java中的final关键字
final变量如果在变量前加final关键字,则这个变量一旦被初始化,便不可再改变。如果一个final变量是类成员变量,则必须被初始化,且只能被初始化一次。方法中的参数也可以是final变量。这在我们需要传递引用型的变量时非常有用,因为有时候我们并不希望调用函数修改该变量而影响到原函数中对象的值。因此将引用型变量设为final类型可以有效方式变量被调用参数修改。此时在调用方法中只可原创 2012-09-30 21:44:43 · 929 阅读 · 0 评论 -
java中的垃圾回收
相对于c语言的这种由开发人员显式的分配内存、释放内存,如果处理不当往往会造成内存泄露的问题。java的垃圾回收机制监视java程序的运行,自动释放不再使用的对象的内存。java使用软指针(指向对象引用的指针)来跟踪对象的所有引用。并使用一个对象表将软指针映射为对象的引用。垃圾收集器以单独的线程在后台运行,通过软指针依次检查每个对象。垃圾收集器会不定时的检查对象的各个引用,如果一个对象没有任何的原创 2012-09-30 23:26:11 · 1103 阅读 · 0 评论 -
java中的抽象类与接口
一个抽象类只能作为其他类的基类,它不能被实例化。含有抽象方法的类必然是抽象类。但是抽象类中的方法不必是抽象的。我们不能将一个抽象类定义成final的。抽象类的具体子类中必须实现抽象类的所有抽象成员。否则必须将子类也定义为抽象类。抽象类可以被声明。接口是特殊的抽象类,所有方法都必须是抽象的和public的。与普通抽象类不同的是,接口中不能有构造方法,不能含有普通成员变原创 2012-10-01 02:40:56 · 1643 阅读 · 3 评论 -
Java中的枚举类型
enum关键字是一个看似很小的特性。使用这个关键字,我们可以创建一个枚举类型。事实上,在使用enum关键字创建新的枚举类型时,其实是创建了一个java.lang.Enum 类的子类。枚举中每个指定的值都可以看做是该类的一个实例。不过我们并不需要在意枚举的本质,只需要将它当做一种创建数据类型的方式,然后可以将获得的类型直接使用即可。在项目开发过程中,我们经常需会用到一些常量,比如原创 2012-09-14 01:39:11 · 3398 阅读 · 0 评论 -
Java中的自增操作符与中间缓存变量机制
我们来看这样一段程序:public static void main(String[] args){ int i, sum1, sum2; i=0; sum1 = (i++)+(i++); System.out.println("sum1="+sum1); i = 0; sum2 = (++i)+(++i)原创 2012-09-17 01:51:04 · 7895 阅读 · 1 评论 -
java中的移位运算符
移位运算符是在数字的二进制形式上进行平移。主要有左移(>)以及无符号右移(>>>)。左移运算符(带符号右移运算符(>>)的运算规则为:按二进制形式将数字右移相应位数,低位舍弃,高位正数补零,负数补1。无符号右移运算符(>>>)的运算规则为:按二进制形式将数字右移相应位数,低位舍弃,高位补零。int a=-8;System.out.println(a << 2);Syst原创 2012-09-19 00:54:28 · 1243 阅读 · 0 评论 -
java类的构造器
提供构造器可以确保在创建对象时,编译器自动调用构造器进行初始化。java中采用了构造器与类名相同的机制,以确保编译器可以知道应该调用哪个方法。使用构造器提高了代码的可读性,也有助于减少错误。 构造器是特殊的方法,它没有返回值。如果我们的类中没有构造器,编译器会自动创建一个默认构造器。它是无参的。如果我们在类中定义了构造器(无论是否有参数),编译器都不会再自动创建默认构造器。我们原创 2012-09-24 00:40:13 · 1341 阅读 · 0 评论 -
Java中的Set与hashCode
我们知道Java中的Collection分为List和Set。List中的元素是有序和可重复的,而Set中的元素无序且不可重复。由于Set中的元素是不可重复的,在每次向一个Set中插入新的元素时,如果没有hashCode,就需要遍历整个集合检查是否已经存在该元素。这样会使Set的效率非常低下。使用哈希算法可以提高从元素集合中查找一个元素的效率。根据集合元素的hashCode来将元素原创 2012-09-16 04:31:43 · 2875 阅读 · 0 评论 -
java三目运算符boolean?x:y中的类型转换
下面的代码是面试宝典上的一道题目:int a=5;System.out.println("a="+((a这段代码的输出是9.0。因为三目运算符中有一个10.9,java会根据运算符的精度类型进行自动类型转换。因此9会变为9.0char x='x';int i=10;System.out.println(false?i:x);System.out.println(原创 2012-09-18 00:17:42 · 8325 阅读 · 1 评论 -
如何在Java中避免equals方法的隐藏陷阱
译者注 :你可能会觉得Java很简单,Object的equals实现也会非常简单,但是事实并不是你想象的这样,耐心的读完本文,你会发现你对Java了解的是如此的少。如果这篇文章是一份Java程序员的入职笔试,那么不知道有多少人会掉落到这样的陷阱中。原文转自http://www.artima.com/lejava/articles/equality.html 三位作者都是不同领域的大拿,有兴趣的读者转载 2012-09-11 22:25:12 · 1052 阅读 · 0 评论 -
什么是java泛型
什么是泛型呢?我们首先写一个最简单的泛型类来说明:public class Generics { //T是type的简称,可以使用任何名称代替 private T o; //泛型成员变量 public Generics(T o){ this.o=o; } public T getObject() { return o; } public void setObject(T原创 2012-09-12 00:04:49 · 6112 阅读 · 0 评论 -
java中的基本数据类型与封装类
java提供了一组基本数据类型,包括boolean, byte, char, short, int, long, float, double, void. 同时,java也提供了这些类型的封装类,分别为Boolean, Byte, Character, Short, Integer, Long, Float, Double, Void。既然提供了基本类型,为什么还要使用封装类呢?原创 2012-09-04 23:59:50 · 18877 阅读 · 2 评论 -
Java中的错误与异常
在java.lang软件包中有一个java.lang.Throwable类,这个类是java中所有错误和异常的超类。顾名思义,这个类(以及子类)的实例可以通过JVM或者java的throw语句抛出。而catch子句的参数也只能是Throwable类型(或者其子类型)。Throwable类有两个子类,Error与 Exception。错误与异常都是在程序编译和运行时出现的错误。不同的是,原创 2012-09-03 00:24:31 · 4439 阅读 · 1 评论 -
Java.lang软件包中的类
java.lang软件包是java语言的核心部分,它提供了java中的基础类。java.lang.Object,这是java.lang的根类,也是所有java类的超类。在构造java类的实例时,都先调用Object中的默认构造方法。类java.lang.Class也是一个非常重要的类。Class 类的实例用来表示正在运行的 Java 应用程序中的类和接口。Class对象原创 2012-09-01 02:47:43 · 6529 阅读 · 1 评论 -
【排序算法】冒泡排序的实现与分析
以升序排序为例:实现方法将所有的待排序的n个数字放入数组中。从第1个数字开始遍历数组,两两比较数组中的元素,如果前者大于后者,则将两者位置进行交换。一次遍历后,最大值将排在最后一个位置上。然后对前n-1个元素做第二次遍历和交换,遍历后第二大的数字将被排到数组的倒数第二个位置。以此类推。代码实现public class BubbleSort {原创 2012-09-07 00:41:29 · 1286 阅读 · 0 评论 -
java中的参数传递与引用
有些java书籍在介绍java中的传参时都说,不论是基本类型还是对象类型,都是传值。这种说法不能算错,但往往让很多初学java的人感到很困惑。因为这里所说的传值与c++中简单变量的传值已经不是同一个概念。对于java传参,我觉得更准确一点的描述是,不论参数是什么类型,传递的都是参数的副本。对于基本类型的变量,传递值的副本。对于引用类型的变量(包括对象与数组),传递引用的副本。由于引原创 2012-09-09 01:02:42 · 1149 阅读 · 0 评论 -
【笔试题】一个无重复面值的找零算法的思路与实现【方案2】
给出升序排列的N个数字,比如1, 2, 3, 7, 70找出无法被这组数字组成的最小正整数。(这组数字中每个数字最多使用一次)(1)简单描述你的算法和思路。(2)用C/C++实现(3)分析你的代码的时间复杂度和空间复杂度解题思路:这个问题类似于一个硬币找零问题的升级版。现存在一堆面值为V1, V2, V3, ...的硬币,每种面值的硬币只有一枚,现在需要为顾客找出总原创 2012-09-04 01:49:12 · 1433 阅读 · 0 评论 -
java中的静态变量、静态方法与静态代码块
我们知道类的生命周期分为装载、连接、初始化、使用和卸载的五个过程。其中静态代码在类的初始化阶段被初始化。而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化。静态变量可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。静态变量有两种情况:静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用静态原创 2012-09-09 17:49:43 · 9168 阅读 · 0 评论 -
java中类与对象的生命周期
类的生命周期.java源文件经过编译后会生成相应的字节码文件(.class)。jvm通过解释器翻译字节码文件并在系统中执行。而java类的生命周期就是其字节码文件装载、连接、初始化、使用、和卸载的整个过程。装载。jvm找到需要装载的类,将类的信息装载到jvm的方法区中。然后在堆区实例化一个java.lang.Class对象,作为方法区中的类的原创 2012-09-06 00:21:36 · 2581 阅读 · 0 评论 -
在dos中运行java程序,出现Exception in thread "main" java.lang.NoClassDefFoundError的原因
在dos中运行java程序,若出现Exception in thread “main" java.lang.NoClassDefFoundError,可以检查一下几项:环境变量配置注意JAVA_HOME、classpath、path是否配置正确。注意格式编译: javac HelloWorld.java执行: java Hello原创 2013-05-24 09:55:46 · 4503 阅读 · 2 评论