Java基础(二)——Java数据类型

面向功能和面向对象的区别

面向结构化(面向功能)

如C、Basic、Pascal等,最小程序设计单元是函数,将功能细分,主函数调用其它函数。自顶向下的设计模式,需要考虑每个模块需要分解成哪些子模块。

面向对象

C++、java、C#、Ruby等,最小程序设计单元是类,这些类可以生成系统中的多个对象,而这些对象则直接映像成客观世界的各种事物。类定义=成员变量+方法。使用类、继承、封装、消息等概念进行程序设计,直接强调以现实中的事物(即对象)为中心来思考,认识问题,并根据这些事物的本质特点,将它们抽象为系统中的类,作为系统的基本构成单元。
面向对象的方式由OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)三个本分有机组成。其中OOA和OOD结构需要使用一种方式来描述并记录,目前业界统一使用UML(统一建模语言)来描述并记录OOA(面向对象分析)和OOD(面向对象设计)的结果。
UML(统一建模语言)介绍
OOA(面向对象分析):对目标系统进行分析,建立分析模型,并将之文档化;
OOD(面向对象设计):对OOA的结果进行细化,得出设计模型;
OOA和OOD的分析、设计结果需要统一的符号来描述、交流并记录 -> UML作为建模语言。
Java API文档
(Application Programming Intererence, 应用程序编程接口)

Java语言特点

Java语言是面向对象编程(Object-Oriented Programming,OOP),java程序的基本组成单元是类(class),一个应用程序由若干类组成,package为类所在的包,类中又可包括属性和方法(java中的子程序称为方法)两部分。每个Java程序都必须包含一个main()方法,有main()方法的类称为主类。
Java语言是纯粹的面向对象的语言,这体现在java支持面向对象的三种基本特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism)。Java最小单位是类,整个java程序由一个一个类组成。封装:将对象的实现细节隐藏起来,然后通过一些公用方法暴露该对象的功能;继承:当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法;多态:子类对象可以直接赋给父类变量,但运行时依然保留子类的特征,这意味着同一类型的对象在执行同一方法时,可能表现出多种行为特征。

Java主类结构

包声明

一个java应用程序由若干类组成,上图是名为First的类,package Number声明该类所在的包。

声明全局(成员)变量和局部变量

通常将类的属性称为类的全局(成员)变量,将方法中的属性称为局部变量。全局变量的声明在类体中,局部变量声明在方法中。上图s1是全局变量,s2是局部变量。
1) 成员变量:在整个类中都有效。类的成员变量又可分为:静态变量,实例变量。静态变量的有效范围可以跨类,甚至可以到达整个应用程序。对于静态变量,除了可以在定义它的类中存取,还能直接以“类名.静态变量”的方式在其它类中使用。
class var{
int x=45; //实例变量
static int y =90;//静态变量
}
2) 局部变量:在类的方法体中定义的变量,只在当前代码块中有效。局部变量可与成员变量的名字相同。但此时成员变量将会被隐藏,即这个成员变量在此方法中暂时失效。

3) 主方法main():main()是类体中的主方法,是程序开始执行的位置,它从“{”开始在“}”结束。Java中的main()方法必须声明为public static void,public权限修饰符、static静态修饰符、void返回值修饰符。String[] args是main()的参数,是一个字符串类型的数组。
4) 导入API(应用程序接口)类库
可通过import关键字导入相关的类。在JDK的API(应用程序接口)中提供了130多个包,如java.awt、java.io等。可通过JDK的API文档查看这些类。API文档主要包括类的集成结构、类的应用、成员变量表、构造方法等,并对每个变量的使用作了详细阐述。
Java applet是通过网络动态下载的小程序。
程序的移植(项目的导入导出):右击项目->Properties->查看项目的路径,空白处右击->Import->General-Existing Projects into Workspace

基本数据类型

Java是强类型(strongly type)语言:所有变量必须先声明后引用;指定类型变量只接受类型与之匹配的值。

整型

有三种表示形式:十进制、八进制(必须以0开头)、十六进制(必须以0X或0x开头)
根据在内存中所占的大小,分为四种类型:byte、short、int、long
byte:8位 -128127,(对原始二进制进行操作)
short:16位 -32768
32767(节约内存)
int:32位 -2147483648~2147483647(常用的整型,)
long:64位 如100L,100l
注意:对于long类型,若赋给的值超过了int范围,则需要在数字后面加L或l,表示该整数为长整型,如long num=2147483650L。

浮点型:有小数部分的数字

float:32位(若想使用float类型,需要在小数后添加F或f)
double:64位(常用,Java类库中默认都看作double类型)

float f1=13.23f;
double d1=456.12;
注意:只有浮点类型的数才可以使用科学计数法,如5.12e2表示 ,int型不能使用科学计数法,如512e2表示的是浮点型数据。
三个特殊的浮点类型:正无穷:POSITIVE_INFINITY(double类或float类,如正数除以0)、负无穷:NEGATIVE_INFINITY(double类或float类,如负数除以0)、非数:NaN(double类或float类,如对一个负数开方得到非数)。只有浮点数除以0才可以得到正无穷或负无穷,因为java会把0自动当成浮点数0.0来处理,整数除以0将抛出异常。

字符型

chart型:16位Unicode字符集作为编码方式,0~65535(可以对char进行运算,对应ASCII和Unicode的运算)。’s’表示一个字符(char),”s”表示一个字符串(String)。(Unicode被设计成支持世界上所有书面语言的字符,因此java程序支持各种语言的字符。所谓字符集,就是给所有字符编号所组成的集合,当计算机需要保存某个字符时,只需要将该字符编号,然后将编号转换成二进制。)
转义字符:以\开头

boolean型:表示true或false的值

通常用在流程控制中作为判断条件。
注意:所有数字在计算机中都是以二进制存在的,计算机是以补码的形式保存所有的整数。所以原码即是补码除去最高位后,取反,减1得到的。可以在数值中使用下划线,方面数值的阅读。
反码:最高位(符号位)保持不变,对原码按位取反。
补码:正数的补码与原码完全相同;负数的补码是其反码加1。

引用数据类型

包括类、接口、数组、null类型。引用数据类型就是对一个对象的引用,对象包括实例和数组两种。事实上引用数据类型就是一个指针,只是java中不再使用指针这个说法。空引用只能转成引用数据类型,不能转成基本数据类型。

基本类型的类型转换

自动类型转换:将范围较小的数值或变量直接赋值给范围较大的变量。

强制类型转换:将上图从右往左转换。容易造成溢出,使数据丢失。
如内存中数据32位int型->8位byte型,只留数据的低八位,将高位去掉,最左边是符号位,再将这第七位取反码,再减1,从而得到原码形式。

通常情况下,字符串不能转换为基本类型,但通过基本类型的包装类可以实现。如将字符串转换为int型:
String a = “45”;
//使用Integer的一个方法将字符串转换为int型
int iValue = Integer.parseInt(a);
java为8种基本类型都提供了对应的包装类:byte->Byte, short->Short, int->Int, long->Long, float->Float, double->Double, char->Character, boolean->Boolean。8个包装类都提供了静态方法 将字符串转换成基本类型。(parse解析)

变量与常量

标识符和关键字

标识符用来表示类名、变量名、方法名、数组名、文件名的有效字符序列。
常见关键字:

常量语法:final 常量=值;(常量名一般使用大写)

声明变量

系统内存可分为三个区域:系统区(OS)、程序区(programming)、数据区(data)。当程序执行时,程序代码会加载到programming区,数据暂时存储在data区。

声明常量

常量在整个程序中只能被赋值一次,除了制定数据类型外,还需通过final关键字进行限定,常量名称通常为大写:
final 数据类型 常量名称[=值]
注意:当定义的final变量为全局变量,这需要定义时赋初值。

变量的有效范围

变量被定义出来后指示被暂存在内存中,等到程序执行到某一个点后,该变量就会被释放。根据程序的有效访问代码的区域,分为全局(成员)变量和局部变量。

运算符

算术运算符

按位运算符

与&、或|、取反~、异或^(不同则为1)、左移<<、右移>>、无符号右移>>>(左移n位:乘以2的n次方,右移n位:除以2的n次方)

关系运算符(relational operator)

逻辑运算符(logical perator)

对于&&,只要左边为false,则右边不会再计算;但&无论左边真假,右边都会计算。
对于||,只要左边诶true,则右边就不会再计算;但|无论左边真假,右边都会计算。
逻辑运算符的操作数必须是boolean类型。

三元运算符

条件?值1:值2 若条件为true则表达式取值1,否则取值2.
%是求模运算符,返回整数除法的余数。

赋值运算符(assignment operator)

表达式(expression)可包含运算符、变量、字面量。当一个表达式中混入不同的数据类型char、byte、short,都会转换为同一类型int。它们本来的类型不变,只是表达式的类型发生了改变。当一个操作数是long型,整个表达式提升为long,当一个操作数是float型,整个表达式提升为float,当一个操作数是double型,整个表达式提升为double型。

评估真假的表达式:布尔表达式(Boolean expression)
关系运算符(relation operator)
循环控制变量(loop control variable)
分隔符(seperator)
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)
十进制(decimal),二进制以0b或0B开头八进制(octal)以0开头,十六进制(hexadecimal)以0x或0X开头。
转义序列(escape sequence)
radius半径,volume体积
运算符(operator)
代码块(code block):一对花括号内实现代码块。块定义作用域,作用域定义对象的可见性和生命周期。在块内,变量可以在任何地方声明,块退出时销毁变量。
前缀(prefix)后缀(postfix)
array数组
fraction分数
\t水平制表符,使各列对齐

代码注释://单行注释,/* /多行注释,/* */文档注释
在开发中定义类、方法时,可以先添加文档注释,然后使用javadoc工具生成自己的API文档,但默认只处理public、protected修饰的类、成员变量、方法、接口、构造器、内部类之前的文档注释。

提取文档注释生成API文档

不使用IDE工具

javadoc 选项 java源文件|包
java命令可以对源文件、包生成API文档,java源文件可以支持通配符,如*.java代表当前路径下的所有java源文件。javadoc的常用选项:
-d:指定一个路径,用于将生成的API文档放到该指定目录下;
-windowtitle:指定一个字符串,用于设置API文档的浏览器窗口标题;
-doctilte:指定一个HTML格式的文本,用于指定概述页面的标题;(只有对处于多个包下的源文件生成API文档时才有概述页面)
-header:指定一个HTML格式的文本,包含每个页面的页眉。

使用eclipse生成API

默认在工程下生成doc文件,访问index.html查看:

添加包描述:

编码规范:每条语句要独占一行,一条命令要以分号结束;声明变量时,尽管是相同数据类型,也应该分行,便于添加注释,对于局部变量,应在声明时初始化;关键方法要多加注释。

Import别人的java文件
新建与别人项目名相同的项目,将别人的src拖到新建的src当中。如别人导出的文件是这样的:

在eclipse中新建项目awesom-java-leetcode-master,(直接将别人的src拖到新建的项目里,其实我没有这一步,因为我直接将别人的项目放到了我的eclipse工作文件夹下,新建了项目工程后,eclipse默认将源代码导入)。