1,传值和传引用html
对于基本类型,传递的是自身的副本java
对于对象类型而言,传递的是指向本身的地址的副本数组
(经过引用副本找到地址并修改地址中的值)钥匙和仓库。安全
基本类型,传值的副本;对象类型,传引用的副本服务器
2,静态变量和私有变量网络
(2)静态变量、静态方法和静态块并发
一般状况下,类成员必须经过它的类的对象访问,可是能够建立这样一个成员,它可以被它本身使用,而没必要引用特定的实例。在成员的声明前面加上关键字static就能建立这样的成员。若是一个成员被声明为static,它就可以在它的类的任何对象建立以前被访问,而没必要引用任何对象(跟类是否有static修饰无关)。dom
你能够将方法和变量都声明为static。static 成员的最多见的 例子是main( ) 。声明为static的方法有如下几条限制(main也是??): ·ui
A,它们仅能调用其余的static 方法this
B,它们只能访问static数据
C,它们不能以任何方式引用this 或super(this涉及到对象,super 与继承有关)
示例:Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块。
执行结果是:
static block initialized
x = 42
a = 3
b = 12
上述class TestNew的执行顺序是:首先static 块执行(打印一条消息),a被设置为3,最后b被初始化为a*4 成12。而后调用main(),main () 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。
(3)外部使用静态变量或者静态方法
在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用,你只要在类的名字后面加点号运算符便可。能够看到,这种格式与经过对象引用变量调用非static方法或者变量的格式相似。示例:
执行结果:
a = 42
b = 99
3,输入流/输出流
连接:http://blog.csdn.net/hguisu/article/details/7418161
在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操做那么对于Java中的IO体系也就有了一个初步的认识了
Java I/O主要包括以下几个层次,包含三个部分:
1.流式部分――IO的主体部分;
2.非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;
3.其余类--文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操做系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。
主要的类以下:
1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
2. InputStream(二进制格式操做):抽象类,基于字节的输入操做,是全部输入流的父类。定义了全部输入流都具备的共同特征。
3. OutputStream(二进制格式操做):抽象类。基于字节的输出操做。是全部输出流的父类。定义了全部输出流都具备的共同特征。
Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。为此,JAVA中引入了处理字符的流。
4. Reader(文件格式操做):抽象类,基于字符的输入操做。
5. Writer(文件格式操做):抽象类,基于字符的输出操做。
6. RandomAccessFile(随机文件操做):它的功能丰富,能够从文件的任意位置进行存取(输入输出)操做。
Java中IO流的体系结构如图:
ps:
Scanner 和BufferedReader一样能实现将键盘输入的数据送入程序,
import java.io.*;
import java.util.Scanner;
public class C {
public static void main(String []args) throws IOException
{
String x1,x2;
int sum=0;
System.out.print("BufferedReader方法\ninput two number:");
//BufferedReader对象只将回车看做输入结束,获得的字符串
BufferedReader myReader=new BufferedReader(new InputStreamReader(System.in));
x1=myReader.readLine();
x2=myReader.readLine();
int a=Integer.parseInt(x1);
int b=Integer.parseInt(x2);
sum=a+b;
System.out.printf("Sum=%d",sum);
System.out.println("\n\nScanner 方法");
Scanner sc=new Scanner(System.in);
int a1,b1;
a1=sc.nextInt();
//Scanner对象把回车,空格,tab键都看做输入结束,直接用sc.next()获得的是字符串形式
b1=sc.nextInt();
System.out.print("sum="+(a1+b1));
}
}
BufferedReader是字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取!速度要比Scanner快!并且也能够设置缓冲区的大小,或者可以使用默认的大小。大多数状况下,默认值就足够大了。
在建立Scanner类的对象时,须要用System.in做为它的参数,也能够将Scanner看做是System.in对象的支持者,System.in取得用户输入的内容后,交给Scanner来做一些处理.
Scanner类中提供了多个方法:
next():取得一个字符串;
nextInt():将取得的字符串转换成int类型的整数;
nextFloat():将取得的字符串转换成float型;
nextBoolean():将取得的字符串转换成boolean型;
Scanner类位于java.util包中,要加上import java.util.Scanner; 用Scanner得到用户的输入很是的方便,可是Scanner取得输入的依据是空格符,包括空格键,Tab键和Enter键.当按下这其中的任一键时,Scanner就会返回下一个输入.当你输入的内容中间包括空格时,显然,使用Scanner就不能完整的得到你输入的字符串.这时候咱们能够考虑使用BufferedReader类取得输入.其实在Java SE 1.4及之前的版本中,尚没有提供Scanner方法,咱们得到输入时也是使用BufferReader的.
BufferedReader类位于java.io包中,因此要使用这个类,就要引入java.io这个包
import java.io.BufferedReader. readLine()方法会返回用户在按下Enter键以前的全部字符输入,不包括最后按下的Enter返回字符.使用BufferedReader对象的readLine()方法必须处理java.io.IOException异常(Exception).使用BufferedReader来取得输入,理解起来要复杂得多.可是使用这个方法是固定的,每次使用前先如法炮制就能够了
4,序列化和反序列化
连接:http://www.cnblogs.com/xdp-gacl/p/3777987.html
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,一般存放在一个文件中;
2) 在网络上传送对象的字节序列。
在不少应用中,须要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。好比最多见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,因而Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
当两个进程在进行远程通讯时,彼此能够发送各类类型的数据。不管是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方须要把这个Java对象转换为字节序列,才能在网络上传送;接收方则须要把字节序列再恢复为Java对象
java.io.ObjectOutputStream表明对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把获得的字节序列写到一个目标输出流中。 java.io.ObjectInputStream表明对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。 只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自 Serializable接口,实现Externalizable接口的类彻底由自身来控制序列化的行为,而仅实现Serializable接口的类能够 采用默认的序列化方式 。 对象序列化包括以下步骤: 1) 建立一个对象输出流,它能够包装一个其余类型的目标输出流,如文件输出流; 2) 经过对象输出流的writeObject()方法写对象。 对象反序列化的步骤以下: 1) 建立一个对象输入流,它能够包装一个其余类型的源输入流,如文件输入流; 2) 经过对象输入流的readObject()方法读取对象。