java-基础

1.java中的final关键字:http://www.importnew.com/7553.html

final关键字的含义?
final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。

  • final变量经常和static关键字一起使用,作为常量。final变量是只读的
    • final成员变量必须在声明时初始化或者在构造器中初始化,否则会报编译错误。
    • final本地变量(在方法中的或者代码块中的变量称为本地变量)必须在声明时赋值。
    • 不能够对final变量再次赋值。
  • final方法不可以被子类覆写
  • final类不能被继承,它们通常是完整的类。java中有许多类是final的,如String,Integer以及其他包装类。
2.java中的static关键字:http://www.cnblogs.com/dolphin0520/p/3799052.html

static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途

简而言之:方便在没有创建对象的情况下来进行调用(方法/变量)。
很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

  • static方法
    static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
    虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。
  • static变量
    static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
    static成员变量的初始化顺序按照定义的顺序进行初始化。
  • static代码块
    static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
    很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

在C/C++中static是可以作用于局部变量的,但是在Java中切记:static是不允许用来修饰局部变量。不要问为什么,这是Java语法的规定。

3.toArray()中参数的作用

String[] result = set.toArray(new String[0]);

  • 使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]。 虽然Object数组也不是不能用,但当你真的想用一个具体类型的数组时转化就非常麻烦。
    需要用到这个String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
    还是一开始就弄成String[]比较好。所以需要使用带参数的toArray.
  • String[] a = collection.toArray(new String[0]);
    如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将根据指定数组的运行时类型和此 collection 的大小分配一个新数组。这里给的参数的数组长度是0,因此就会返回包含此 collection 中所有元素的数组,并且返回数组的类型与指定数组的运行时类型相同。
4. java可变参数

Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。

注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以也只支持有一个可变参数。

因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。
可变参数的特点:

  • 只能出现在参数列表的最后;
  • ...位于变量类型和变量名之间,前后有无空格都可以;
  • 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
    示例代码:
public class Varable {
   public static void main(String [] args){
       System.out.println(add(2,3));
       System.out.println(add(2,3,5));
   }
   public static int add(int x, int... args){
       int sum=x;
       for(int i=0;i
5.Arrays.asList()
public class NodeNetwork {
  private List nodes;
  public NodeNetwork(Node...  nodes) {
      this.setNodes(Arrays.asList(nodes));
  }
  public void setNodes(List nodes) {
        this.nodes = nodes;
    }
}
    Node[] nodes = new Node[3];
    nodes[0] = node1;
    nodes[1] = node2;
    nodes[2] = node3;
    nnw=new NodeNetwork(nodes);
    nnw.addNode(node2); 

此时会报错:UnsupportedOperationException
原因:

Returns a fixed-size list backed by the specified array.

it is documented not to support any structural modification (i.e. removing or adding elements)
因为Arrays.asList()返回的是一个固定大小的列表,故无法对其进行add操作。

6.StringBuilder()

String对象是不可改变的。每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,创建新的 String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能。

7.transient 详见http://www.importnew.com/21517.html
  • 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

  • transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

  • 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

8. Scanner用法

当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的nextLine()方法即可。

public class TestScanner { 
        public static void main(String[] args) { 
                Scanner s = new Scanner(System.in); 
                System.out.println("请输入字符串:"); 
                while (true) { 
                        String line = s.nextLine(); 
                        if (line.equals("exit")) break; 
                        System.out.println(">>>" + line); 
                } 
        } 
}
请输入字符串: 
234 
>>>234 
wer 
>>>wer 
bye 
>>>bye 
exit 

Process finished with exit code 0

你可能感兴趣的:(java-基础)