自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(138)
  • 收藏
  • 关注

原创 Java_基础_参数传递

Java中方法的参数传递均为按值传递,即使传递的是对象或者数组,传递过去的也是引用的拷贝。package com.algorithms;/** * Created by 田爽 on 2015/9/27 9:16. */public class Person { private int age; public Person(int age) { this.age =

2015-09-27 09:54:52 664

原创 Java_基础_i=i++;

例:package deep;public class PostPlus { public static void main(String[] args) { int i = 15; i = i++; System.out.println(i); }}运行结果: 15前置++与后置++的真正区别是:前置++直接将变量的值加1,然后

2015-08-07 21:06:58 546

原创 Java_多线程_成员变量与局部变量

线程会共享进程范围内的资源,例如内存句柄和文件句柄,但每个线程都有各自的程序计数器、栈及局部变量等。线程还提供了一种直观的分解模式来充分利用多处理器系统中的硬件并行性,而在同一个程序中的多个线程还可以被同时调度到多个CPU上运行。线程也被称为轻量级进程。在大多数现代操作系统中,都是以线程为基本的调度单位,而不是进程。同一个进程中的所有线程都将共享进程的内存地址空间,因此这些线程都能访问相同的成员变量

2015-05-27 11:08:33 970

原创 Java_基础_取余操作符 %

首先我们来看下 The Java® Language Specification 中官方对它的定义:The binary % operator is said to yield the remainder of its operands from an implied division; the left-hand operand is the dividend and the right-hand

2015-05-13 13:26:16 987

原创 Java_本地方法_Java程序中调用c函数

Java编程语言使用关键字native表示本地方法,关键字native提醒编译器该方法将在外部定义。当然,本地方法不包含Java编程语言的代码,而且方法标题后直接跟着一个表示终结的分号。因此,本地方法声明看上去和抽象方法声明类似。 例:package test;public class HelloNative { public static native void greeting();

2015-05-08 10:42:16 885

原创 Java_语法基础_定义规范的接口类型

接口,是一种完全抽象的设计,没有任何实现。接口有以下3个特征: 1.所有的成员变量都是public、static、final类型。 2.所有的方法都是public、abstract类型。 3.所有的嵌套类型(类或接口)都是public、static类型。 4.即使以上3点没有显式的声明也是如此。 由此可知,接口中的所有成员都是public的,因为接口是抽象的,必须由其他类所实现,故成员一定

2015-04-29 22:52:59 3219

原创 Java_数组_基本概念

多维数组在Java中,对于多维数组,使用“数组的数组”来实现,即高维数组的每一个元素是一个低维数组,例如: int[][] a = new int[2][5];这是一个矩阵数组,可以这样理解:该语句声明了一个二维数组a,该数组含有两个元素,每个元素为一个一维数组,每个一维数组含有5个元素。 其实,Java中并不存在真正的多维数组,只是使用这种“数组的数组”方式来实现的。也因为如此,不同于C/

2015-04-29 20:35:06 454

原创 Java_语法基础_包装类的缓存

包装类同String类相似,也是非可变类,其对象一经创建,就不能修改。并且,包装类也重写了equals方法,对于相同类型的两个包装类对象,只要两个对象所包装的基本数据类型的值是相等的,则equals方法就会返回true,否则返回false。在使用“==”比较两个包装类引用时,如果两个引用指向的地址相同(指向相同的对象),则结果为true,否则结果为false。 包装类提供了对象的缓存,具体的实现方

2015-04-29 19:28:01 1257

原创 Java_基础_初始化顺序

实例变量可以在声明处初始化,也可以在实例初始化块或构造器中初始化。静态变量可以在声明处初始化或在静态初始化块中初始化。那么,在一个类中,以上5种初始化方式可能都存在,这样一来,顺序就产生了。5种初始化方式会按怎样的顺序来执行呢?换句话说,会先执行哪一个,后执行哪一个? 既然初始化存在一定的顺序,就会存在变量访问的问题。如果在变量尚未初始化的时候就访问变量,会发生怎样的情况呢?成员变量的初始化顺序例

2015-04-29 19:20:21 616

原创 Java_基础_继承的成员变量

如果子类继承了父类的某些成员变量,则子类就可以访问这些变量,就像这些变量是在子类中声明的一样。然而,现在有这样一个问题:这些成员变量是从父类复制了一份,还是与父类共享同一个变量呢? 我们首先看实例变量。 例:package deep;public class FieldSharing { public static void main(String[] ary) { Wat

2015-04-29 09:21:13 493

原创 Java_语法基础_成员变量的默认值

如果我们不做任何初始化工作,变量具有什么默认值,或者是否具有默认值? 其实,成员变量在创建时,系统会为其分配一个默认值。不同类型的变量,默认值也不相同。 例:package deep;public class DefaultValue { // 实例成员变量 private boolean bool; private byte b; private short s

2015-04-27 23:02:44 7828 1

原创 Java_语法基础_执行初始化的构造器

构造器,也称构造方法,用来初始化类的实例变量,在使用new关键字创建对象的时候,由系统自动调用。构造器必须与类名相同,并且没有返回值,在外观上与类中声明的方法相似,例如,也可以具备形式参数、类型变量、异常列表等。然而,构造器不是方法,也不是类的成员。 另外,很多人认为构造器创建了对象,并且在构造器是否存在返回值的方面存有疑问,那事情是怎样的呢?在构造器中,我们还经常使用this关键字,可是,thi

2015-04-21 22:37:00 643

原创 Java_集合操作_非稳定排序推荐使用List

我们知道Set与List的最大区别就是Set中的元素不可以重复(这个重复指的equals方法的返回值相等),其他方面则没有太大的区别了,在Set的实现类中有一个比较常用的类需要了解一下:TreeSet,该类实现了类默认排序为升序的Set集合,如果插入一个元素,默认会按照升序排列(当然是根据Comparable接口的compareTo的返回值确定排序位置了),不过,这样的排序是不是在元素经常变化的场景

2015-04-13 14:24:19 727

原创 Java_多线程_多线程使用Vector或HashTable

Vector是ArrayList的多线程版本,HashTable是HashMap的多线程版本,这些概念我们都很清楚,也被前辈嘱咐过很多次,但我们经常会逃避使用Vector和HashTable,因为用得少,不熟嘛!只有在真正需要的时候才会想要使用它们,但问题是什么时候算真正需要呢?我们来看一个例子,看看使用线程安全的Vector是否可以解决问题,代码如下:package deep;import jav

2015-04-12 17:39:52 1418

原创 Java_集合操作_集合中的哈希码不要重复

在一个列表中查找某值是非常耗费资源的,随机存取的列表是遍历查找,顺序存储列表是链表查找,或者是Collections的二分法查找,但这都不够快,毕竟都是遍历嘛,最快的还要数以Hash开头的集合(如HashMap、HashSet等类)查找,我们以HashMap为例,看看它是如何查找Key值的,代码如下:package deep;import java.util.ArrayList;import ja

2015-04-12 16:47:54 449

原创 Java_集合操作_集合运算时使用更优雅的方式

在初中代数中,我们经常会求两个集合的并集、交集、差集等,在Java中也存在着此类运算,那如何实现呢?一提到此类集合操作,大部分的实现者都会说:对两个集合进行遍历,即可求出结果。是的,遍历可以实现并集、交集、差集等运算,但这不是最优雅的处理方式。下面来看看如何进行更优雅、快速、方便的集合操作。1.并集 也叫做合集,把两个集合加起来即可,这非常简单,代码如下:package deep;import j

2015-04-12 14:45:54 2234

原创 Java_集合操作_关于subList,子列表

子列表只是原列表的一个视图List接口提供了subList方法,其作用是返回一个列表的子列表,这与String类的subString有点类似,但它们的功能是否相同呢?我们来看如下代码:package deep;import java.util.ArrayList;import java.util.List;public class Client { public static void ma

2015-04-12 11:41:57 1235

原创 Java_集合操作_不同的列表选择不同的遍历方法

我们来思考这样一个案例:统计一个省得各科高考平均值,比如数学平均分是多少,语文平均分是多少等,这是每年招生办都会公布的数据,我们来想想看该算法应如何实现。当然使用数据库中的一个SQL语句就能求出平均值,不过这不在我们的考虑之列,这里还是使用纯Java的算法来解决之,看代码:package deep;import java.util.ArrayList;import java.util.List;

2015-04-12 10:49:12 626

原创 Java_集合操作_asList方法产生的List对象不可改变

例:package deep;import java.util.Arrays;import java.util.List;public class Client { public static void main(String[] args) { Integer[] data = { 1, 2, 3, 4, 5 }; List list = Arrays.as

2015-04-11 22:33:02 1671

原创 Java_集合操作_避开基本类型数组转换列表陷阱

我们在开发过程中经常会使用Arrays和Collections这两个工具类在数组和列表之间转换,非常方便,但也有时候会出现一些奇怪的问题,来看如下代码:package deep;import java.util.Arrays;import java.util.List;public class Client { public static void main(String[] args) {

2015-04-11 22:04:05 372

原创 Java_集合操作_多种最值算法,适时选择

对一批数据进行排序,然后找出其中的最大值或最小值,这是基本的数据结构知识。在Java中我们可以通过编写算法的方式,也可以通过数组先排序再取值的方式来实现。下面以求最大值为例,解释一下多种算法。1.自行实现,快速查找最大值 先来看用快速查找法取最大值的算法,其代码如下: public static int max(int[] data) { int max = data[0];

2015-04-11 21:40:01 734

原创 Java_String_对字符串排序持一种宽容的心态

在Java中一涉及中文处理就会冒出很多问题来,其中排序也是一个让人头疼的问题,我们来看下面的代码:package deep;import java.util.Arrays;public class Client { public static void main(String[] args) { String[] strs = { "张三(Z)", "李四(L)", "王五(W

2015-04-10 11:34:48 493

原创 Java_正则表达式_推荐在复杂字符串操作中使用正则表达式

字符串的操作,诸如追加、合并、替换、倒序、分割等,都是在编码过程中经常用到的,而且Java也提供了append、replace、reverse、split等方法来完成这些操作,它们使用起来也确实方便,但是更多的时候,需要使用正则表达式来完成复杂的处理,我们来看一个例子:统计一篇文章中英文单词的数量,很简单吧?代码如下:package deep;import java.util.Scanner;pub

2015-04-10 11:23:26 721

原创 Java_String_字符串“+”的问题

例:package deep;public class Client { public static void main(String[] args) { String str1 = 1 + 2 + " apples"; String str2 = "apples:" + 1 + 2; System.out.println(str1);

2015-04-10 11:01:39 485

原创 Java_String_正确使用String、StringBuffer、StringBuilder

CharSequence接口有三个实现类与字符串有关:String、StringBuffer、StringBuilder,虽然它们都与字符串有关,但是其处理机制是不同的。 String类是不可改变的量,也就是创建后就不能修改了,比如创建了一个“abc”这样的字符串对象,那么它在内存中永远都会是“abc”这样具有固定表面值的一个对象,不能被修改,即使想通过String提供的方法来尝试修改,也是要么创

2015-04-10 10:29:38 430

原创 Java_语法基础_注意方法中传递的参数要求

有这样一个简单需求:写一个方法,实现从原始字符串中删除与之匹配的所有子字符串,比如在“蓝蓝的天,白云飘”中,删除“白云飘”,输出“蓝蓝的天,”,代码如下:package deep;public class StringUtils { // 删除字符串 public static String remove(String source, String sub) { re

2015-04-10 10:02:20 572

原创 Java_基础_不要覆写静态方法

我们知道Java中可以通过覆写(Override)来增强或减弱父类的方法和行为,但覆写是针对非静态方法(也叫做实例方法,只有生成实例才能调用的方法)的,不能针对静态方法(static修饰的方法,也叫做类方法),为什么呢?我们先看一个例子,代码如下:package deep;public class Client { public static void main(String[] args)

2015-04-10 09:45:19 413

原创 Java_基础_静态变量一定要先声明后赋值

这标题看着让人很纳闷,什么叫做变量一定要先声明后赋值?Java中的变量不都是先声明后使用的吗?难道还能先使用后声明?能不能暂且不说,我们先来看一个例子,代码如下:package deep;public class Client { public static int i = 1; static { i = 100; } public static vo

2015-04-10 09:12:52 4908

原创 Java_语法基础_不要随便设置随机种子

随机数在太多的地方使用了,比如加密、混淆数据等,我们使用随机数是期望获得一个唯一的、不可仿造的数字,以避免产生相同的业务数据造成混乱。在Java项目中通常是通过Math.random方法和Random类来获得随机数的,我们来看一段代码:package deep;import java.util.Random;public class Client { public static void ma

2015-04-10 08:57:07 1047

原创 Java_语法基础_优先选择基本类型

包装类型是一个类,它提供了诸如构造方法、类型转换、比较等非常实用的功能,而且在Java5之后又实现了与基本类型之间的自动转换,这使包装类型如虎添翼,更是应用广泛了,在开发中包装类型已经随处可见,但无论是从安全性、性能方面来说,还是从稳定性方面来说,基本类型都是首选方案。我们来看一段代码:package deep;public class Client { public static void

2015-04-10 08:39:59 319

原创 Java_语法基础_优先使用整型池

例:package deep;import java.util.Scanner;public class Client { public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNextInt()) {

2015-04-09 21:41:24 300

原创 Java_语法基础_谨慎包装类型的大小比较

基本类型是可以比较大小的,其所对应的包装类型都实现了Comparable接口也说明了此问题,那我们来比较一下两个包装类型的大小,代码如下:package deep;public class Client { public static void main(String[] args) { Integer i = new Integer(100); Intege

2015-04-09 21:02:18 310

原创 Java_语法基础_提防包装类型的null值

我们知道Java引入包装类型(Wrapper Types)是为了解决基本类型的实例化问题,以便让一个基本类型也能参与到面向对象的编程世界中。而在Java5中泛型更是对基本类型说了“不”,如想吧一个整数放到List中,就必须使用Integer包装类型。我们来看一段代码: /** * @Description 计算list中所有元素之和 * @author 田爽 *

2015-04-09 20:47:36 556

原创 Java_语法基础_不要让四舍五入亏了一方

在Java5之前,我们一般是通过使用Math.round来获取指定精度的整数或小数的,这种方法使用非常广泛,代码如下:package deep;public class Client { public static void main(String[] args) { System.out.println("10.5近似值:" + Math.round(10.5));

2015-04-09 20:30:26 827

原创 Java_语法基础_边界,边界,还是边界

某商家生产的电子产品非常畅销,需要提前30天预订才能抢到手,同时它还规定了一个会员可拥有的最多产品数量,目的是防止囤积压货肆意加价。会员的预定过程是这样的:先登录官方网站,选择产品型号,然后设置需要预定的数量,提交,符合规则即提示下单成功,不符合规则提示下单失败。后台的处理逻辑模拟如下:package deep;import java.util.Scanner;public class Client

2015-04-09 19:23:33 1106 1

原创 Java_语法基础_不要让类型默默转换

例:package deep;public class Client { // 光速是30万公里/秒,常量 public static final int LIGHT_SPEED = 30 * 10000 * 1000; public static void main(String[] args) { System.out.println("题目1:月亮光照射到

2015-04-09 18:54:34 278

原创 Java_String_String常量池

package deep;public class StringTest { public static void main(String[] args) { final String fs = "Java"; String s = "Java"; final int fi = 7; int i = 7; Str

2015-04-08 21:07:54 313

原创 Java_语法基础_equals方法与“==”的区别

例:package deep;public class Box { private int batch; public Box(int batch) { this.batch = batch; } public static void main(String[] args) { Box box1 = new Box(1);

2015-04-08 20:49:59 408

原创 Java_基础_交换变量

package deep;public class Swap { public static void main(String[] args) { Value value = new Value(5, 10); System.out.println("交换前:" + value); swap(value); System.out

2015-04-08 18:35:25 352

原创 Java_语法基础_运算顺序的详细挖掘

从左向右的计算顺序:例:package deep;import java.util.Arrays;public class Sequence { public static void main(String[] args) { int a[] = new int[] { 0, 0, 0, 0, 0 }; int j = 3; a[j] = j

2015-03-25 22:48:57 369

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除