码迷,mamicode.com
首页 > 编程语言 > 详细

Java编程思想(二) —— 初始化与清理

时间:2014-08-07 15:47:00      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   color   java   使用   数据   

(一)操作符一章的int类型数据溢出的问题在Java7的版本中仍然存在,而且溢出的结果千奇百怪。

public class Hello {
    public static void main(String[] args) {
        int i = Integer.MAX_VALUE;
        System.out.println(i);
        System.out.println(i*4);
        System.out.println(i*5);
    }
}
结果分别为2147483647,-4,2147483643。

当应用中的数据超过int的最大值时,就不能用int类型了。


(二)控制流程一章值得注意的是For语法(用来遍历数组和容器)和标签。

Java没有goto,先说很少接触到的标签,这标签的功能和goto类似。

public class Hello {
    public static void main(String[] args) {
        Label1: 
          for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                System.out.println(j);
                if (j == 2) {
                    break Label1;
                }
            }
         }
    }
}

break之后能够break最外层的循环,当j等于2的时候,直接跳出。如果简单的用上一两个比较方便,但是大量用到之后,跳来跳去的东西是让人头疼的。


For遍历的语法。

public class Hello {
    public static void main(String[] args) {
        int[] i = {1,2,3,4,5,6,7,8,9,0};
        for(int k = 0; k< i.length;k++){
            System.out.println(i[k]);
        }
        for(int j:i){
            System.out.println(j);
        }
    }
}
明显后者遍历的语法更加简洁,应用于容器的以后会提到。


(三)接下来就是初始化与清理的问题。

(1)首先是方法重载的问题。重载方法同名字,但是参数类型,甚至参数的顺序不同都可以(最后一个不提倡,如果就单单改变顺序的话传参易出错)。

public class TV {
    TV(String name){
    }
    
    void control(){
    }
    /*int  control(){
     * return 1;
    }*/
    void control(int page,String name){
    }
    void control(String name,int page){
    }
}
如上,重载的方法不能同参数同名不同类型,因为编译器根本就不知道你要用哪个。

此时如果用new出TV对象的话,是会出错的,因为默认是给你一个构造器的TV(){}

但是你此时自己自定义构造器,那么编译器就会觉得你自己弄的,那么默认的构造器你也自己去写。


(2)this关键字

以前博客也有一个问题的答案就是this

Android this与Activity.this的区别 

this在方法内部使用,获得当前对象的引用。

public class TV {
    String name;
    int price;
    void point(String name){
        this.name = name;
    }
    TV(String name){
        this.name = name;
    }
    TV(int price,String name){
        this(name);
        this.price = price;
    }

经常使用的,其实就是将传参的name赋给TV的name。this也可以调用自己的构造器。


(3)垃圾回收


GC回收算法小了解(以前看别人写的文章的一些笔记)
1 引用计数法  堆中的对象各自对应引用计数器,new的时候+1,为0的时候回收。
2 复制算法    两倍的内存空间,垃圾回收的时候遍历其中一个空间,遍历使用的对象
再复制到另外一个空间中。
3 标记清除法  标记使用的对象清除未使用的对象。

按分区对待方式区分
1 增量收集   实时垃圾回收
2 分代收集   年轻代 年老代 持久代

线程区分 
串行 并行 并发


(4)初始化问题

public class TV {
    int price; //字段为基本类型时,会自动初始化,int默认为0
    TV tv;//引用的话默认为null
    void point(){
        int p;
      //  System.out.println(p);  局部变量需要自己初始化
    }
}

(5)static关键字

之前一直想不明白那句,static方法内部不能调用非静态方法,昨天看的时候大拍了一下自己的大腿,其实,static可以让你直接用类来访问该方法,但是如果里面可以调用静态方法,那么两者就没什么区别了,可以互相嵌套。


静态数据的初始化,static修饰的静态存储区域会先初始化,而且就初始化一次。这样说的话,其实我们没有写的默认构造器其实也是static方法,最先初始化。


(6)可变数组参数

参数后面加3个点,很奇葩的用法:

public class TV {
    static void point(int... price){
       for(int i :price){
           System.out.println(i);
       }
    }
    public static void main(String[] args) {
        TV.point();
        TV.point(1);
        int[] p = {1,2,3,4,5};
        TV.point(p);
    }
}

/*result:
1
1
2
3
4
5
*/
可变数组参数,可以是空,可以一个,可以多个。

初始化是基础的东西,写程序的时候的低级错误的一些原因在此,经常就是初始化的没初始化。还有static的顺序也是优先的。



Java编程思想(二) —— 初始化与清理,布布扣,bubuko.com

Java编程思想(二) —— 初始化与清理

标签:android   style   blog   http   color   java   使用   数据   

原文地址:http://blog.csdn.net/iaiti/article/details/38415165

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!