初始化和清理
“不安全”的编成,其安全问题包括:初始化和清理
一:初始化
1用构造函数来确保初始化。
2方法的重载
名字管理是编程语言底一项重要特性。创建对象的时候,你会给内存空间起名字,
而方法是动作的名字。
可以用参数个数和类型来区分重载的方法。但是不能用返回值来区分。
3构造函数
默认大构造函数是“无参数”的构造函数,但如果你写了一个没有构造函数的类
那么编译器会自动为你创建一个末人大构造函数。但是,只要定义了构造函数(无论有无参数),编译器就不会再自动创建默认的构造函数。
在构造函数里调用构造函数,需要注意两点:
A;在一个构造函数里可以用this调用另一个构造函数,但是不能调用两个
B:记得在程序的最前面调用构造函数
否则编译器会报错
4:static
你可以不通过对象,直接对类调用static方法,(本义)。它和c里的全局函数一样,然而java不允许有全局函数,类的static方法只能访问其他static发放和static数据成员。
二: 清理:finalization和垃圾回收
假设对象所占据的是一些特殊的,不是用new分配的内存,垃圾回收器只知道该如何释放用new分配的内存,所以它就不知道该如何释放这些“特殊的”内存。所以java提供了一个叫finalize()的方法,你可以自己定义类的这个方法。
1所谓的拆构函数就是对象清理的时候必须调用的函数。但是这里一定要搞清楚c++和java的区别。C++的对象总是会得到清理的,而java对象并不总是会被回收的,换言之:
a:对象不一定会被垃圾器回收。
B; 垃圾回收不是拆构。
2:须记:
A;垃圾回收只于内存有关。(也就是说,垃圾回收的唯一目的,就上一要将那些不能为程序所用的内存恢复出来)
3:不论对象是以什么方式创建的,内存释放都是由垃圾回收器负责的。
4:finalize()还有一很有趣的用途,这时它就不要求每次都被调用到了,这就是检查对象的中止条件
三:成员的初始化
1用构造函数进行初始化,但是你要记住,你并没有排除自动的初始化,它在构造函数进行之前就已经完成了。举例:
Public class Counter {
Int I;
Counter(){
I=9;
}
}
I会被先初始化为0,然后才是7
2初始化的顺序
对类而言,初始化的顺序由变量在类的定义里面的顺序(位置)决定的,但是变量的初始化会优先于任何方法,甚至是构造函数的调用。
3:静态初始化只运行一次。
4:数组的初始化
举例:
public class Arrays
{
public static void main(String[] args)
{
int a1[]={1,2,3,4,5};
int a2[];
a2=a1; //a
for(int i=0;i<a2.length;i++){
a2[i]++;//b
}
for(int i=0;i<a1.length;i++){
System.out.println("a1["+i+"}=:"+a1[i]);
}
//预测结果 --- 实际结果
//a[1]=1; --- a[1]=2;
//a[2]=2; --- a[2]=3;
//a[3]=3; --- a[3]=4;
//a[4]=4' --- a[4]=4'
//a[5]=5; --- a[5]=5;
}
};
说明:第a句:a2=a1 你真正做的是复制reference,使a2的对象和a1的对象一样引用同一块内存;第b句: a[i]++ 其改变的是内存的值,所以a1的值也就变了
java 提供两种不同的类型:引用类型(或者封装类型,Warpper)和原始类型(或内置类型,Primitive)。Int是java的原始数据类型,Integer是java为int提供的封装类
对于原始类型定义的数组,可以这样直接定义,例如:int[] a1 = new int[4];
对于Integer这个引用类型(或一般其他自己定义的类),这样定义数组后
Integer[] a2 =new Integer[5];这只是一个reference的数组,所以只要还没有创建新的Integer对象来初始化这些reference,初始化的过程还没结束,然而,如果你忘了创建对象,那么程序运行的时候,当你要用到数组的空位置的时候,就会得到一个异常。(a1不会发生异常,a2会发生异常。)
分享到:
相关推荐
### Java编程思想学习笔记知识点详解 #### 一、操作符 **1.1 赋值操作符** - **符号**: `=` - **功能**: 用于将右侧的值赋给左侧的变量。 - **注意**: 当作用于基本类型时,赋值的是具体的值;当作用于对象时,则...
### Java编程思想读书笔记知识点概览 #### 第2章 万事万物皆对象 **知识点一:对象存储位置** - **寄存器**:通常由CPU直接控制,Java程序员无法直接访问。 - **栈 (Stack)**:主要存放基本类型的数据和对象的...
### Java编程思想笔记知识点概述 #### 第 1 章 对象导论 在这一章节中,主要介绍...以上内容概括了《Java编程思想笔记》中的核心知识点,涵盖了Java语言的基础到高级特性,适合初学者和有一定经验的开发者参考学习。
### Java私塾学习笔记整理 #### 第一章:Java入门 ...以上内容涵盖了Java基础知识的重要方面,从语言基础到高级特性,以及常见的开发技术和工具,帮助读者全面了解Java编程的基础知识和技术要点。
一、Java编程思想 1. 面向对象编程(OOP):Java的核心是面向对象,这意味着它以类和对象的形式组织代码。类是具有属性(变量)和行为(方法)的模板,而对象是类的实例。理解类和对象、封装、继承和多态等概念是...
- **BeanFactory**:是Spring最基础的容器,提供了配置机制和依赖注入的基本功能,如XMLBeanFactory是从XML文件中加载bean的定义并初始化它们。 - **ApplicationContext**:是BeanFactory的扩展,提供了更多高级功能...
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
在“Simpllist”中,这些方法可能用于初始化数据、更新视图或清理资源。 **Redux或MobX状态管理** 为了在复杂应用中更好地管理全局状态,开发者可能会选择使用Redux或MobX这样的状态管理库。虽然“Simpllist”是一...