随笔分类 - Java
摘要:这个是华为OJ上的一道题目。首先,如果我们用java写代码,华为OJ有以下三条规则需遵守,否则编译无法通过或者用例无法通过,规则如下:(1)一定不可以有包名;(2)主类名只能为Main;(3)不可以输出与结果无关的信息。 好了,按照以上规则,我们写出来的代码如下(此代码不是最优的,只是用来记录...
阅读全文
摘要:java里,所有的类,不管是java库里面的类,或者是你自己创建的类,全部是从object这个类继承的。object里有一个方法就是toString(),那么所有的类创建的时候,都有一个toString的方法。 这个方法是干什么的呢? 首先我们得了解,java输出用的函数print();是不...
阅读全文
摘要:wsimport命令介绍 在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据wsdl文件生成相应的类文件,然后用这些类文件,就可以像调用本地的类一样调用WebService提供的方。该工具可以用于非Java的服务器,如:用C#编写的WebService,通过wsimport则生...
阅读全文
摘要:控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找。依赖注入应用比较广泛,我们这里...
阅读全文
摘要:一、预先需要掌握的知识(java虚拟机) 1)java虚拟机的方法区: java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区。方法区的主要作用是存储被装载的类 的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文...
阅读全文
摘要:1 什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作。Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 Java.io是大多数面向数据流的输入/输出类的主要软件包。此外,Java也对块传输提供支持,在核心库 java.nio中采用的便是块IO。 流IO的好处是简单易用,缺点是效率较低。块IO效率很高,但编程比较复杂。 Java IO模型: Java的IO模型设计非常优秀,它使用Decorator模式,...
阅读全文
摘要:众所周知,传递小量参数(在没有其他原因,例如隐藏参数值的情况下)推荐使用GET方法,传递大量参数推荐使用POST方法。原因是什么呢? 原因是传说GET方法是通过URL来传递,而URL的长度是受限的,而POST方法采用流的方式,理论上可以传递的容量是没有限制的。 现在来看这个描述:“URL的长度是受限的”,但HTTP协议规范也没有对URL长度进行限制,具体是在哪里受限制呢?browser端还是server端呢? 网上现在google出来的结果都是说url的长度实际上是受到browser的限制,如IE限定url长度为2083字节,opera 是4050, Netscape 是8192,等...
阅读全文
摘要:字节流与字符流的区别? 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如下图所示 下面以两个写文件的操作为主进行比较,但是在操作时字节流和字符流的操作完成之后都不关闭输出流。 案例1:使用字节流不关闭执行package byteStream;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;/** * 操作字节流 ...
阅读全文
摘要:System.in读取标准输入设备数据(从标准输入获取数据,一般是键盘),其数据类型为InputStream。方法: int read() // 返回输入数值的ASCII码,,该值为0到 255范围内的int字节值。若返回值为-1,说明没有读取到任何字节读取工作结束。 int read(byte[] b) // 读入多个字节到缓冲区b中,返回值是读入的字节数package InPackage;/** * System.in.read()返回值为输入数值的ASCII码,该值为0到 255范围内的int字节值 * 如果因为已经到达流末尾而没有可用的字节,则返回值 -1。 */public ...
阅读全文
摘要:抽象类abstract class 包含抽象方法的类,叫抽象类。而抽象的概念就是抽象出共同属性:成员变量和方法。所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法。当然抽象方法是一定要有的。 抽象类是用于单一继承的,不能实例化。而继承类一定要实现抽象方法,因为抽象方法在抽象类里是没有实现行为的,访问权限只能是public。而非抽象方法则可以赋予方法的默认行为,访问权限可以多种,但需要考虑非抽象方法是否需要被继承类访问。接口 interface 接口,用于多重继承,也不能实例化。只能包含static final的成员变量,不过在interface中一般不定义成...
阅读全文
摘要:static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区或者方法区内找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。 sta...
阅读全文
摘要:根据上下文环境,java的关键字final也存在着细微的区别,但通常指的是“这是无法改变的。”不想改变的理由有两种:一种是效率,另一种是设计。由于两个原因相差很远,所以关键子final可能被误用。 接下来介绍一下使用到final的三中情况:数据,方法,类final数据 许多编程语言都有某种方法,来向编译器告知一块数据是恒定不变的。有时数据的恒定不变是很有用的,例如:一个编译时恒定不变的常量一个在运行时初始化,而你不希望它被改变。 对于编译期常量的这种情况,编译器可以将该常量值代入任何可能用到它的计算式中,也就是说,可以在编译期就执行计算式,这减轻了一些运行时的负担。在java中,这类...
阅读全文
摘要:编译器常量的特点就是:它的值在编译期就可以确定。比如: finalinti=5; 再傻的编译器也能在编译时看出它的值是5,不需要到运行时。对于运行时常量,它的值虽然在运行时初始化后不再发生变化,但问题就在于它的初始值要到运行时才能确定。 比如: Random rand = new Random(47); final int i4 = rand.nextInt(20); 虽然i4的值在定义并初始化后不会再发生变化(除非你使用一些不符合标准的小技巧),但再聪明的编译器也无法在编译时确定它的值呀。 为了更清楚的理解编译器常量的概念,我们引入【常量折叠】的概念:在编译器里进行语法分析的...
阅读全文
摘要:对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:package InitialOrder;/** * JAVA 初始化顺序 * @author Administrator * 初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)> 构造器。 */public class InitialOrderTest { // 静态变量 public static String staticField = "静态变量"; // 变量
阅读全文
摘要:Java中存在着两种Random函数:一、java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。例子如下:package IO;import java.util.Random;public class TestRandom { public static void main(String[] args) { // 案例1 System.out.println...
阅读全文
摘要:publicstaticvoidmain(String[]args) 这绝对不是凭空想出来的,也不是没有道理的死规定,而是java程序执行的需要。 jvm在试图运行一个类之前,先检查该类是否包含一个特殊方法。这个方法必须是公有的,以便在任何位置都能访问得到。这个方法必须是static的,因为这个方法不能依赖任何该类的实例即可运行,而非static的方法,在运行之前要先创建该类的实例对象。 这个方法没有返回值。和C/C++程序不一样,java的程序默认都以常态结束,所以main不返回int。如果要以非常态结束程序,可以用System.exit(1)。 这个方法必须可以接受数目不定的S...
阅读全文
摘要:equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址。一般重写了equals()方法就表示比较它们“实际意义上相等”,比较的是内容,而不是引用地址。Java中String重写了equals方法,所以此时比较的是两者的内容是否相等,而==比较的永远是地址。package testPage;/* * ==和equals有何区别 * 这是在网上偶然看到的一个帖子,如果让我说,还真说不清楚,所以决定一探究竟。 * */public class StringAndEquals { public static void main(String[] arg...
阅读全文
摘要:理论上Struts 2.0的Action无须实现任何接口或继承任何类型,但是,我们为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重载(Override)此类里的String execute()方法。当然我们也可以在写action的时候实现Action接口. Action接口有:public static final java.lang.String SUCCESS = "success";public static final java.lang.String NONE = "none
阅读全文
摘要:package testPage;import java.io.File;import java.io.FilenameFilter;import java.io.IOException;/** * File类有一个listFiles(FileNameFilter filter). * 只需要实现一个简单的filter就可以找到满足fileter条件的所有文件。 * 例如我要在E:\data\file_selector_test 目录下面查找以.txt结尾的文件,我可以这么做。见下例。 * @author Administrator * */public class FileNameSelec
阅读全文
摘要:正则表达式是由英文词语regular expression翻译过来的,就是符合某种规则的表达式。正则表达式在软件开发中应用非常广泛,例如,找出网页中的超链接,找出网页中的email地址,找出网页中的手机号码,判断输入的内容是否全部是数字,是否满足某种日期格式等等。 正表达式理解为一种对文字进行模糊匹配的语言,它用一些特殊的符号(称为元字符)来代表具有某种特征的一组字符以及该组字符重复出现的次数。例如,对于正则表达式“\d{5}(-\d{4})?”,\d就是一个元字符,它表示一个数字,{5}表示紧靠它前面的元素项连续重复5次,\d和{5}的组合\d{5}就表示匹配任意连续的5个数字字符;-\..
阅读全文