传递和引用

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 初始化块。

 

[java]  view plain  copy
 
  1. public class TestNew {  
  2.     static int a = 3;  
  3.     static int b;  
  4.     static void meth(int x){  
  5.         System.out.println("x = "+x);  
  6.         System.out.println("a = "+a);  
  7.         System.out.println("b = "+b);  
  8.     }  
  9.     static {  
  10.         System.out.println("static block initialized");  
  11.         b = a*4;  
  12.     }  
  13.     public static void main(String[] args) {  
  14.         // TODO Auto-generated method stub  
  15.         meth(42);  
  16.     }  
  17. }  

 

       执行结果是:

 

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方法或者变量的格式相似。示例:

 

[java]  view plain  copy
 
  1. class StaticDemo{  
  2.     static int a = 42;  
  3.     static int b = 99;  
  4.     static void callme(){  
  5.         System.out.println("a = "+a);  
  6.     }  
  7. }  
  8. public class TestNew {  
  9.     public static void main(String[] args) {  
  10.         // TODO Auto-generated method stub  
  11.         StaticDemo.callme();  
  12.         System.out.println("b = "+StaticDemo.b);  
  13.     }  
  14. }  

 

     执行结果:

 

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:

Java中BufferedReader和scanner的对比

 

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、序列化和反序列化的概念

  把对象转换为字节序列的过程称为对象的序列化
  把字节序列恢复为对象的过程称为对象的反序列化
  对象的序列化主要有两种用途:
  1) 把对象的字节序列永久地保存到硬盘上,一般存放在一个文件中;
  2) 在网络上传送对象的字节序列。

  在不少应用中,须要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。好比最多见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,因而Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。

  当两个进程在进行远程通讯时,彼此能够发送各类类型的数据。不管是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方须要把这个Java对象转换为字节序列,才能在网络上传送;接收方则须要把字节序列再恢复为Java对象

2、JDK类库中的序列化API

  java.io.ObjectOutputStream表明对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把获得的字节序列写到一个目标输出流中。  java.io.ObjectInputStream表明对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。  只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自 Serializable接口,实现Externalizable接口的类彻底由自身来控制序列化的行为,而仅实现Serializable接口的类能够 采用默认的序列化方式 。  对象序列化包括以下步骤:  1) 建立一个对象输出流,它能够包装一个其余类型的目标输出流,如文件输出流;  2) 经过对象输出流的writeObject()方法写对象。  对象反序列化的步骤以下:  1) 建立一个对象输入流,它能够包装一个其余类型的源输入流,如文件输入流;  2) 经过对象输入流的readObject()方法读取对象。

相关文章
相关标签/搜索