2.1 用引用操作对象
(1)Java语言是一种纯面向对象的编程语言,Java中操纵一个对象是通过“引用”实现的。让我们来看下书中的一个实例:
String s = “asdf”
这句话“等号”(个人习惯引用数学上的概念,计算机中应该是赋值符号,下同)左边部分申明了一个指向string类型的对象的引用,该引用名为s,如果我们忽略“等号”右边内容的话,那么这个引用可以指向string类型的所有对象,“等号”右半部分是对这个引用进行初始化,即把s指向一个string类型并且内容为 “asdf” 的对象。引用也可以被赋值,如 上面的例子后面跟这句 String a = s ,那么就创建了一个名为 a 的新的引用。a 跟 s 指向同一个对象。
2.2 必须由你来创建所有对象
对象不会凭空产生,所有对象必须都由你自己来创建。除基本类型外的对象都用new关键字来创建。
(1)String s = new String(“asdf”)
“等号”左边申明的是一个引用。“等号”右边是对对象进行实例化和初始化,实例化是通过new关键字来实现的,它给对象在内存中分配了一个地址。String(“asdf”)是通过调用一个构造方法String()对这个对象进行初始化,使这个对象的内容为”asdf”。这个例子中,s指向的是对象所在的内存地址值,而不是指向对象本身(对象的内容)。看个例子:
String s = new String(“asdf”)
String a = new String(“asdf”)
这里引用s和a所指向对象的内容是相同的,都为”asdf”,但是 a = = b 编译器返回false,因为s 和 a 分别指向内存中的两个地址,虽然对象内容是相同的,但是编译器返回false,(这也说明 = = 比较的是引用指向的地址的值,并非比较对象的内容)。这好比你去邮局邮寄两个包裹,这两个包裹装的都是同一件物品---书本,但是一个是邮到北京的,一个是邮到上海的,虽然这两个包裹里装的东西是一样的,但是你不能说北京等于上海吧?
(2)并不是所有的对象实例化跟初始化后都必须有引用指向它的,如果把对象实例化跟初始化看成一个整体,如 把 new String(“asdf”) 看成一个整体,也可以这样用:
System.out.print(new String(“asdf”))
但是这样只能用一次,想再次用这个对象必须重新创建过了。
(3)对象创建后不同类型的数据放在不同的地方:
a. 寄存器:在存储器内部,速度最快,但是我们无法直接控制。
b. 堆栈:在随机访问存储器中,速度快,但是大小和生命周期受限制。对象引用跟基本类型就存在堆栈中。
c. 堆:也在随机访问存储器中,数据大小和生命周期较灵活,但是牺牲了效率,对象就是存在此的。
d. 静态存储:也在随机访问存储器中,存储static成员元素。
e. 常量存储:存储常量。(一般的时候常量是直接存在程序代码中的)。
f. 非RAM存储:存储完全独立与程序之外的数据,如:流对象、持久化对象。
(4)Java中有九种基本类型,即 boolean、char、byte、short、int、long、float、double、void ;它们对应的外覆类分别为:Boolean、Character、Byte、Short、Integer、Long、Float、Double、Void ;出于效率上考虑,java中的基本类型不用new关键字来创建。基本类型也存放在堆栈中,并且其大小是固定不变的(虽然boolean类型没有明确指定大小,但是其大小也是不随硬件架构的变化而变化)。如果你想用堆来存储基本数据类型的话,就要使用该类型的外覆类来实现了 例如Character C = new Character(‘x’);下面是基本类型默认初始化的值:
boolean类型变量默认初始值为false
char类型变量默认初始值为0(ASCII码)
byte类型变量默认初始值为0
short类型变量默认初始值为0
int类型变量默认初始值为0
float类型变量默认初始值为0.0f
double类型变量默认初始值为0.0d
long类型变量默认初始值为0L
(5) Java中的数组本身也是对象,所以它跟所有对象一样,引用类型变量默认初始值为null,即不指向任何对象,创建数组对象产生的引用数组初始化时也是指向null,值为null的引用是不能被操作的,所以Java中的数组是安全的。
2.3 永远不需要销毁对象
(1)基本类型变量只能在它的作用域(以一对花括号来分隔)范围生存,在作用域里定义的变量只可用于作用域结束之前。Java中同一作用域下的某个基本变量是不可以被重复定义的。
(2)对象在离开作用域是不会消失的,出了作用域消失的只是指向对象的引用,java 中有一个“垃圾回收机制”,会定时扫描已建的对象,在确定哪些对象已经没有任何引用指向它的时候就自动把它销毁,从而释放内存空间,所以java中不需要你自己去销毁对象。
2.4 创建新的数据类型:类
(1)Java是通过类来决定对象的属性(行为跟外观)的。Java类通过class关键字创建,如 class ATypeName创建了一个名为ATypeName的类。Java类包括字段跟方法两元素,字段可以为任何类型的对象,也可以为基本类型;对象的引用通过构造器(特殊的方法)进行初始化,基本类型用做类成员则可在定义的时候进行初始化。(如程序中未初始化,java编译器会自动给它个默认的初始值)但是非某个类的字段的基本类型则不会自动给初始化,编译时则会返回一个错误。
2.5 方法、参数和返回值
(1)方法是由名称、参数、返回类型以及方法体组成的。名称+参数唯一标识一个方法,方法只有通过对象才能被调用,并且有对象引用指向其返回值的时候,对象引用的类型必须与返回值的类型一致,如:
Int x = a.f();
f()的返回值类型必须是int型的,否则会报错。
(2)在向一个方法传递一个对象的时候,实际上传递的是该对象的引用(基本数据类型除外),而传递的对象类型一定要和方法中接受参数的参数类型相同。如你不想方法返回任何值,可以把该方法的返回类型设置为void,而此时方法中的return就是用来离开方法的,不需要等到它执行完毕,如果方法的返回类型不为void的时候,你可以使用return 返回一个和返回类型一样的值。
2.6 构建一个Java程序
(1) 使用独一无二的名字空间,推荐使用Internet域名倒写
(2)使用公共类,用import命令导入公共包
(3)*** static 是静态修饰符,被static修饰后的成员(变量或类),在编译时由内存分配一块内存空间,直到程序停止运行才会释放,也就是说无论该类建多少个对象,所有对象都会共享这块内存空间。所有指向这些对象的引用都相等的。另外,被static修饰后的成员(变量或类)可以通过一个对象去引用它,也可以用类名直接引用它。也就是说不一定要实例化对象才能引用被static修饰的成员。
***补充一下关于原始数据类型默认初始化的问题,大家知道,在类函数的外部声明的变量是全局变量,这些全局变量如果是原始数据类型的话,那么不论是否有在声明的时候显示初始化,在每次对象实例化的时候系统都会给其自动初始化的,而对于一个声明为static的原始数据类型的全局变量来说,这样的初始化只会进行一次,例如:
class time {
nt i = 2;
public static void main(String args[]){
time t = new time (); //第一次实例化,系统自动初始化
t.i = 3;
time tt = new time (); //第二次初始化
System.out.println(t.i);
System.out.println(tt.i);
}
}
运行显示结果3,2,在这里实例化了两次对象,而全局变量就初始化了两次,而如果全局变量i声明为static的话,那么虽然实例化两次,实际上变量i只初始化了一次,在第二次实例化的时候不会对全局变量进行初始化了,此时输出的结果是3,3 。
2.7 你的第一个Java程序
(1)写第一个Java程序的时候我个人感觉还是环境配置的问题比较头痛,这里就讲下环境配置;其他按书本一步步对即可!
window2000/xp jdk1.5.0_05 配置方法:
1. JAVA_HOME 值:C:\Program Files\Java\jdk1.5.0_05
2. CLASSPATH 值:.;%JAVA_HOME%\lib
3. Path:%JAVA_HOME%\bin; (也许系统变量里面已经有了Path变量,那么就修改它好了,在原来的值的前面加上%JAVA_HOME%\bin;)
2.8 注释和嵌入式文档
这小节就不多写了,这些都是从代码的美观性、易懂出发的。养成个良好的编程风
格是你成功的保障。
分享到:
相关推荐
面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将功能封装进对象,强调具备了功能的对象。 面向对象是基于面向过程的。
本教程将深入探讨Java中的数组、方法以及面向对象编程的基础概念,为初学者提供一个全面的学习指南。 一、数组 数组在Java中是存储同一类型数据的集合,可以看作是一个可变大小的容器。数组的定义和初始化通常包含...
通过书籍,个人整理的java基础之类的对象的定义的有关知识点
在JavaCV 1.3中,你可以找到用于图像处理、特征检测、对象识别、人脸识别等功能的API。例如,高斯模糊、边缘检测(如Canny算法)、模板匹配、霍夫变换等都是OpenCV提供的基础功能。 其次,FFmpeg是另一个被JavaCV...
【JAVA基础-初识JAVA】 Java是一种广泛使用的高级编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。它的设计目标是“一次编写,到处运行”,这意味着编写好的Java程序可以在任何支持Java环境的...
Java基础[03-面向对象].pdf Java基础[04-继承上].pdf Java基础[04-继承下].pdf Java基础[05-多线程].pdf Java基础[06-集合].pdf Java基础[07-IO].pdf Java基础[08-GUI].pdf Java基础[09-网络编程].pdf
这份"java基础---PPT讲稿.zip"压缩包包含了对Java基础知识的深入讲解,旨在帮助学习者掌握Java的核心概念,为更高级的学习阶段打下坚实的基础。 在PPT中,我们可能会涵盖以下几个关键知识点: 1. **Java简介**:...
《精通Java--JDK、数据库系统开发、Web开发基础与实例》是一本全面覆盖Java编程技术及应用实践的书籍。本书旨在帮助读者深入理解和熟练掌握Java语言,从基础到高级,从理论到实践,全方位提升Java开发技能。 首先,...
Java基础是编程世界中至关重要的一环,尤其对于初学者来说,掌握好Java基础知识将为后续的深入学习和开发工作奠定坚实的基础。"java基础--微学院"这个资源显然是为了帮助初学者系统地学习Java编程而设计的。让我们来...
Java 基础 Java 流程控制 Java 方法 Java 数组 Java 类和对象 Java 类的继承和多态机制 Java 接口和包 Java 异常处理 Java 输入与输出 Java 图形用户界面设计 Java Swing 组件 Java Applet 程序 Java 多线程 Java ...
【Java基础-尚硅谷课件资料】是一套全面讲解Java编程语言的学习资源,适用于初学者和进阶者。课程内容涵盖了从Java语言的基础概念到高级特性的深入理解,旨在帮助学习者掌握Java开发的核心技能。 在Java编程语言的...
### Java基础 #### 1. Java概述 - **定义**:Java是一种面向对象的编程语言,由Sun Microsystems公司于1995年推出。 - **特点**: - 面向对象:支持封装、继承、多态等特性。 - 平台无关性:Java程序可以在任何...
这个"java基础教程----精华版"显然是一份精心整理的资料,旨在帮助初学者快速掌握Java编程的基础知识。下面将详细介绍Java语言的核心概念和关键知识点。 1. **Java语法基础**: - **变量**:在Java中,变量是存储...
JAVA 基础是编程学习的重要一环,尤其对于初学者而言,掌握好JAVA的基础知识是成为...总的来说,JAVA基础涵盖了从编程语言基础到高级特性的广泛知识,学习者需要深入理解和实践,才能在JAVA开发领域打下坚实的基础。
这个“Java基础-经典入门教程”旨在帮助初学者掌握Java编程的核心概念和技能,为深入学习和应用Java打下坚实的基础。 1. **Java简介**:Java以其“一次编写,到处运行”的特性而闻名,它使用JVM(Java虚拟机)作为...
JAVA实验-Java语言面向对象编程基础.pdf
计算机后端-Java-Java核心基础-第15章 面向对象07 21. 接口练习:比较对象大小.avi
计算机后端-Java-Java核心基础-第11章 面向对象03面向对象03 14. JavaBean的使用.avi
计算机后端-Java-Java核心基础-第11章 面向对象03面向对象03 15. 介绍UML类图.avi
本文档提供了JAVA基础知识的复习笔记,涵盖了JAVA的基础概念、数据类型、运算符、控制流程、类和对象、继承、多态、抽象类和接口等方面的知识。 一、数据类型 在JAVA中,有以下几种基本数据类型: * 整数类型:...