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编程思想(二) —— 初始化与清理

时间: 2024-08-09 17:23:57

Java编程思想(二) —— 初始化与清理的相关文章

《java编程思想》 初始化与清理

1.初始化与清理的重要性: 1.许多C程序的错误都源于程序员忘记初始化变量,特别是使用程序库时,如果不知道如何初始化库的构件更容易出错 2.当使用完一个元素时,这个元素就不会有什么影响了,所以很容易就会忘记,但是这个元素占用的资源一直存在,如果资源一直得不到释放,就会造成资源(内存)耗尽 2.构造器确保初始化: 在java中,通过提供构造器,可以确保每个对象都会得到初始化.创建对象时,如果类对象有构造器,java就会在操作对象之前自动调用相应的构造器,从而保证了初始化进行. 3.static的含

Java 编程思想 第五章 ----初始化与清理(1)

从今天开始每天一小时的java 编程思想的阅读和编码,其实就是把书上的代码抄下来. 5.5 清理:终结处理和垃圾回收 初始化和清理工作同等重要,但是清理工作却被常常忘记,但是在使用对象之后,对对象弃之不顾的做法并不是很安全.Java有自己的垃圾回收器负责回收无用的对象占据的内存资源.但也有特殊情况:假定你的内存区域不是用new获得的,这是无法用垃圾回收器释放所以java中允许在类中定义一个名为 finalize()的方法.       工作原理: 一旦垃圾回收器准备好释放对象占用的存储空间,将首

《 Java 编程思想》CH05 初始化与清理

< Java 编程思想>CH05 初始化与清理 用构造器确保初始化 在 Java 中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.Java 会保证初始化的进行.构造器采用与类相同的名称. 由于构造器的名称必须与类名完全相同,所以"每个方法首字母小写"的风格在这里不适用. 构造器方法可以有参数,这样可以在初始化对象时提供实际参数. 不接受任何参数的构造器叫做"默认构造器". 构造器一种特殊类型的方法,它没有返回值 方法重载 因为可以要用多种方式

java编程思想总结(二)

java编程思想总结(二) java编程思想总结是一个持续更新的系列,是本人对自己多年工作中使用到java的一个经验性总结,也是温故而知新吧,因为很多基础的东西过了这么多年,平时工作中用不到也会遗忘掉,所以看看书,上上网,查查资料,也算是记录下自己的笔记吧,过一段时间之后再来看看也是蛮不错的,也希望能帮助到正在学习的人们,本系列将要总结一下几点: 面向对象的编程思想 java的基本语法 一些有趣的框架解析 实战项目的整体思路 代码的优化以及性能调优的几种方案 整体项目的规划和视角 其它遗漏的东西

【Java编程思想】二、一切都是对象

尽管Java是基于C++的,但是相比之下,Java是一种更“纯粹”的面向对象设计语言. 2.1 用引用操纵对象 一切都被视为对象, 因此可采用单一固定的语法.尽管一切都被看作对象,但操纵的标识符实际上是对象的一个“引用”. Java里的“引用”与C++中的“引用”是有区别的,但是这个概念不需要完全明白,学会处理引用就可以了. 2.2 必须由你创建所有对象 new关键字的意思就是“给我一个新对象”! 2.2.1对象存储到什么地方 1)寄存器 2)堆栈(RAM) 3)堆(RAM) 4)常量存储(RO

JAVA编程思想(2) - 操作符(二)

5. 直接常量 -一般来说,如果程序里使用了"直接常量",编译器可以准确的知道要生成什么样的类型,但有时候却是模棱两可的.这时候需要我们对编译器进行适当的"指导" -直接常量后面的后缀字符标示了它的类型. -指数记数法:e代表"10的幂次" -注意如果编译器能够正确的识别类型,就不必在数值后附加字符,例如语句: float f4 = 200; 不存在含糊不清的地方,所以200后面不需要加L,但是对于:float f4 = 1e-43f; 编译器通

《Java编程思想》学习01:普通类的初始化加载顺序分析

<Java编程思想>学习01:普通类的初始化加载顺序分析 本文根据控制变量法,分析普通类(没有extends,implement)初始化的加载顺序: 参考<Java编程思想>第五章 源码 StaticClass1类 package com.tyj.study.thinkinjava; /* * *@Description: *@Author:TYJ *@Date: create in 2019/7/9 17:22 */ public class StaticClass1 { { S

java编程思想 第二章

这篇时间较之前篇章时间靠后,是由于,某一天晚上看完Java编程思想文献之后来不及做笔记了. 以下笔记基本为转载,不是原创 第二章   一切都是对象 目录: 2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.3 永远不需要销毁对象 2.4 创建新的数据类型:类 2.5 方法.参数和返回值 2.6 构建一个Java程序 2.7 你的第一个Java程序 2.8 注释和嵌入式文档 2.9 编码风格 2.1 用引用操纵对象 一切都看作对象,操纵的标识符实际上是对象的一个“引用”,遥控器(引用)操纵

《On Java 8》中文版,又名《Java 编程思想》中文第五版

来源:LingCoder/OnJava8 主译: LingCoder 参译: LortSir 校对:nickChenyx E-mail: [email protected] 本书原作者为 [美] Bruce Eckel,即(Thinking in Java 4th Edition,2006)的作者. 本书是事实上的 Thinking in Java 5th Edition(On Java 8,2017). Thinking in Java 4th Edition 基于 JAVA 5 版本:On