Java编程思想——一切都是对象

来源:互联网 发布:汕头原音电子淘宝店 编辑:程序博客网 时间:2024/05/29 10:24

2一切都是对象

具体了解java之前了解一些基本知识:
常用的DOS命令
dir : 列出当前目录下的文件以及文件夹
md : 创建目录
rd : 删除目录
cd : 进入指定目录
cd.. : 退回到上一级目录
cd: 退回到根目录
del : 删除文件
exit : 退出 dos 命令行
第三代高级语言:
C、Pascal、Fortran面向过程的语言
C++面向过程/面向对象
Java跨平台的纯面向对象的语言
.NET跨语言的平台

Tiobe:编程语言排行榜

两个基本概念:类、对象
三大特性:封装、继承、多态

特点:
面向对象;健壮性(强类型机制,异常处理,垃圾的自动收集);跨平台性:write once,run anywhere。因为java的虚拟机的存在。JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
Java两种核心机制
Java虚拟机(Java Virtal Machine)
垃圾收集机制(Garbage Collection)
JDK(Java Development Kit Java开发工具包)
JRE(Java Runtime Environment Java运行环境)
官方网址:
www.oracle.com
Java.sun.com
配置环境变量:运行javac或java时可以在不同的盘下,不用回到bin的目录下。
在环境变量里的path下修改jdk的路径或者在新建一个变量,防止修改路径时误改了其他路径

一个源文件可以创建多个类,声明包的语句只能有一条,且必须是第一条,声明为public的类或接口只能有一个,且文件名必须与该类名相同。
应用程序的执行入口是main()方法,它有固定的书写格式,public static void main(String[] args) {…}java严格区分大小写
Java源程序结构
Package——声明包,0至1句
import——导入包,0至多句
Public class或interface——声明公有类或接口,0至1句,文件名与其相同
class——声明默认类,0至多句
interface——声明接口,0至多句

2.1用引用操作对象

java中一切都可以看作对象,操作的标识符实际上是对象的一个引用(reference)。可以将这一切想象成用遥控器(引用)来操纵电视机(对象)。握住这个遥控器就可以和保持与电视机的连接。此外,即使没有电视机,遥控器也可以独立存在。即你可以拥有一个引用,并不一定需要有一个对象与它关联。例如如果想操纵一个词或者句子,可以创建一个String引用:

String s;

这里创建的只是引用,不是对象。对s发送一个消息,会返回一个运行时错误,因为没有任何事物与其相关联,可以更改为:

Sting s ="asdf";

2.2必须由你创建对象

一旦创建了一个引用,就希望它能够与一个新的对象相关联。通常用new操作符来实现这一目的。new关键字的意思就是“给我一个对象”。

String s = new String("asdf");

2.2.1存储位置

在程序中有5个不同的地方可以存储数据:
1)寄存器。这是最快的存储区域。位于处理器内部,寄存器数量有限,根据需求分配
2)堆栈。位于通用RAM(随即访问存储器)中,通过堆栈指针可以从处理器那里获得直接支持。堆栈指针往下移,分配新内存,往上移动,释放那些内存。
3)堆。一种通用内存池(位于RAM中),用于存放几乎所有java对象。
4)常量存储。常量值通常直接存放在程序代码内部。有时,在嵌入式系统,常量本身会和其他部分隔离开,这种情况下可以将其存放在ROM中(只读存储器)。
5)非RAM存储。数据完全存活于程序之外,不受程序任何控制,程序没有运行时也可以存在。两个基本例子就是流对象和持久化对象

2.2.2命名规则

Public的类名首字母必须要大写,且类名与文件名一致。Main方法是程序执行的入口
Java程序每一句指令都以;结束 ,且区分大小写。
//是单行注释符,一般用于指令句末,而/* /用于多行注释,多用于程序的开头进行整体的注释,而/* */主要注释作者,版本等信息。
文档注释(java特有)
格式:/**
* @author 指定java程序的作者
*@version 指定源文件的版本
*@param 方法的参数说明信息
*/

java中有一系列的命名规范准则,命名规则必须要遵守,命名准则例如包名,类名等命名可以不遵守,但是不利于程序的简洁性,可读性差。
命名规则
关键字所有的字母都是小写。
标识符即可以自己命名的地方,例如类名,方法名,变量名,接口名等等,不能使用关键字或保留字,但可以包含关键字和保留字,是以字母开头的字母数字序列,含有的符号只能为_与$,不能包含空格。//数字不可以开头。
命名规范
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
标识符的名字尽量有意义,可以做到见名知意。

下面罗列了一下Java中的关键字和保留字,在命名标识符时要避开。
关键字
用于定义数据类型的关键字
class interface enum byte short
int long float double char
boolean void
用于定义数据类型值的关键字
true false null
用于定义流程控制的关键字
if else switch case default
while do for break continue
return
用于定义访问权限修饰符的关键字
private protected public
用于定义类,函数,变量修饰符的关键字
abstract final static synchronized
用于定义类与类之间关系的关键字
extends implements
用于定义建立实例及引用实例,判断实例的关键字
New this super instanceof
用于异常处理的关键字
try catch finally throw throws
用于包的关键字
package import
其他修饰符关键字
native strictfp transient volatile assert
保留字,注意避开使用
byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const

2.2.3变量与基本数据类型

变量
定义变量的格式:数据类型 变量名 = 初始化值
变量先定义后使用,作用于{ }之间
Java中提供一种特殊的变量,只能进行一次赋值,称作最终变量,采用关键字final声明
例如:final int value;
value=100;
符号常量保存在程序中不能被修改的数据,常量名是标识符,采用final声明
例如:final int MAX=10;
基本数据类型
Java要确定每种基本类型所占存储空间的大小。它们的存储空间大小是不变的。

基本类型 大小 最小值 最大值 包装器类型 boolean - - - Boolean char 16-bit unicode 0 unicode2161 Character byte 8-bit -128 +127 Byte short 16-bit 215 +2151 Short int 32-bit 231 +2311 Integer long 64-bit 263 +2631 Long float 32-bit IEEE754 IEEE754 Float double 64-bit IEEE754 IEEE754 Double void - - - Void

boolean类型所占存储空间的大小没有明确指定,仅定义为能够取字面值true或false。
基本类型具有的包装类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。例如:

char c = 'x';Character ch = new Character(c);

也可以

Character ch = new Character('x');

JAVASE5自动包装功能将自动将基本类型转换为包装器类型:

Character ch = 'x';

也可以反向转换

char c = ch;

java的整型常量默认为 int 型, 声明long型常量须后加‘l’或‘L’
Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
转义字符表
容量小的数据类型自动转换为容量大的数据类型,多种数据类型混合运算时先将数据转换为容量最大的数据类型,在进行计算。Byte short char 不会相互转换,他们三者在计算时首先转换为int类型。基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
基本数据自动转换图

System.out .println(3+4+“Hello!”);      //输出:7Hello!System.out.println(“Hello!”+3+4);      //输出:Hello!34System.out.println(‘a’+1+“Hello!”);    //输出:98Hello!

高精度数字
java提供两个高精度计算的类:BigInteger和BigDecimal。虽然大体上属于包装器类型范畴,但是二者都没有对应的基本类型。
这二者包含的方法,提供的操作与基本类型所能执行的操作相似。能作用于int或float的操作,同样能作用于BigInteger或BigDecimal。
这两类以方法调用的方式取代运算符方式来实现。由于这么做比较复杂,所以运算速度较慢。BigInteger支持任意精度的整数。BigDecimal支持任何精度的定点数。

2.2.4Java中的数组

创建一个数组对象,实际上就是创建一个引用数组,并且每个引用都会自动被初始化为一个特定值。Java确保数组会被初始化,并且不能在它的范围之外被访问。
具体数组讨论在初始化章节一并详细讨论。

2.3永远不要销毁对象

2.3.1作用域

作用域决定了在其内定义的变量名的可见性和生命周期。作用域由花括号的位置决定。
例如:

{    int i = 12;    {        int q = 95;        //q和i都存活    }    //只有i存活}

作用域里定义的变量只可用于作用域结束之前。

2.3.2对象的作用域

java对象不具备和基本类型一样的生命周期,当用new创建一个java对象时,它可以存活于作用域之外。故:

{String s = new String("a String");}

在括号之外引用消失了,但是s指向的String对象仍继续占据内存空间。关于不被引用的对象不用操心,java的GC回自动监视new创建的所有对象,辨别那些不会再被引用的对象,释放这些对象的内存空间,供新的对象使用。

2.4创建新的数据类型:类

java中运用关键字class来表示“我准备告诉你一种新类型的对象看起来像什么样子”,class后面紧跟新的数据类型的名称。例如:

class ATypeName{}

通过上述例句你就创建了一种新的类型,然后可以使用new来创建这种类型的对象:

ATypeName example = new ATypeName();

由于还没有定义其方法,无法向它发送消息执行相关有意义的任务。(内部有Object类包含的方法)

2.4.1字段和方法

在java中,所要做的工作主要是定义类,产生类的对象,发送消息给这些对象执行相关任务这三个部分。类的构成成分为:属性,方法,构造器,代码块,内部类。(后面章节详细讨论)

class Example{    int i;//成员变量    public example(){//构造器,与类同名    }    void find(){//方法    }    {//代码块        int j=0;    }    class Subexample{//内部类    }}

一旦定义了某个类,这时候就可以在类中设置两种类型的元素:字段(数据成员)和方法(成员函数)。字段可以是任何类型的对象,可以通过其引用与其通信,也可以是基本类型中的一种。如果字段是某个对象的引用,则必须初始化引用。
例如:

class DataOnly{    int i;    double d;    boolean b;}

如果想要在外部给类中的字段赋值,必须先创建一个类的对象,然后按照如下格式:
对象引用名称.字段名称=想要赋予的值

DataOnly data = new DataOnly();data.i = 10;data.d = 1.2;data.b = true;

如果修改的数据位于对象包含的对象中,即内部类中,只需要在使用连接点即可。这点在内部类方面详细讨论。
如果类中的数据成员是基本数据类型,即使没有初始化,java也会确保它获得一个初始值。

基本类型 默认值 boolean false char ‘\u0000’(空格null) byte (byte)0 int 0 long 0L float 0.0f double 0.0d

当变量作为类的成员使用,java确保给定默认值。一般最好给定初始值,默认值可能对于程序是不正确的。这里说的给定初始值是当做类的成员变量使用时,如果该变量是在方法中或代码块中定义的,是不会有默认值。

2.5方法,参数和返回值

java中方法这个术语用来表示“做某些事情的方式”,方法决定了对象能够接收什么消息。它的基本组成部分包括:名称,参数,返回值和方法体。基本形式如下:

ReturnType methodName(/*Argument list*/){/* Method body*/}

返回类型是调用方法后从方法中返回的值,参数列表给出了要传给方法的信息的类型和名称。方法名称与参数列表唯一地标识某个方法。
java方法只能作为类的一部分来创建,可以通过对象调用方法。对象调用方法的格式为:

objectName.methodName(arg1,arg2);

2.5.1

方法的参数列表指定了要传递给方法什么样的消息。可能这些信息采用的是对象形式等,在参数列表中必须指定每个传递对象的类型和名字,这里传递的是引用,java的传递机制是值传递。
例如:

int storage(Sting s){    return s.length();}

这个方法是返回给定字符串的长度。参数类型是String,参数名为storage,返回类型为int。return表示方法执行完毕,离开此方法。如果方法有返回类型,则将值置于return后面返回。

2.6构建一个java程序

java提供了很多程序包,如果你想使用某个包下的类,则可以使用import关键字来导入这个包。例如:

import java.util.ArrayList;

该行代码告诉编译器,你想使用java的ArrayList类,util包下包含了众多的类,如果你想使用其中的几个可以逐一声明,或者使用通配符*将这个包下的所有类都导入进来。

import java.util.*;

2.6.1

创建类,就是在描述那个类的对象的外观和行为。除非用new创建那个类的对象,否则,实际上并未获得任何对象。当只想为某特定域分配单一存储空间,而不去考虑究竟要创建对象或者不创建对象,亦或者希望某个方法不与包含它的类的任何对象相关联,没有对象也能够创建对象。通过static关键字可以满足这两方面的需求。
例如:

class StaticTest{    static int i = 47;}

这时不管你创建了多少个对象st1,st2,…等,sti.i也只有一份存储空间。

原创粉丝点击