Java技术分类
Java技术分为 J2SE、J2EE和J2ME。其中J2SE就是指从1.2版本开始的JDK,它为创建和运行Java程序提供了最基本的环境。J2EE和J2ME建立在J2SE的基础上,J2EE为分布式的企业应用提供开发和运行环境,J2ME为嵌入式应用。
Java语言的特点
- 面向对象
- 跨平台
- 直接支持分布式的网络应用
- 安全和健壮性
如何建立对象的模型?
- 自底向上的抽象:把问题领域中的事物抽象为具体特定的属性和行为的对象; 把具有相同属性和行为的对象抽象成类;若多个类之间存在一些共性(具有相同属性和行为),把这些共性抽象到父类中。
- 自顶向下的分解:在建立对象模型的过程中,也包括自顶向下的分解。例如对于计算机系统,首先识别出主机对象、显示 器对象、键盘对象和打印机对象等。
面向对象的核心思想是?
- 万物皆为对象
- 每个对象都是唯一的
- 对象具有属性和行为
- 对象具有状态
- 对象都属于某个类,每个对象都是某个类的实例
Java包
-
包的作用
- 能够区分名字相同的类
- 有助于实施访问权限控制
- 有助于划分和组织 Java应用中的各个类
-
包的命名规范
- 类的创建者或拥有者的信息
- 类所软件和项目的信息
- 类在具体软件 项目中所处位置
- 例如,有一个SysContent类的完整类名为com.abc.netstore.common.SysContent类,从这个完整类名中可以看出,SysContent类由abc公司开发,属于netstore项目,位于netstore项目的common包中。
JDK提供的Java基本包
- java.lang包——包含线程类(Thread)、异常类(Exception)、系统类(System)、整数类(Integer)和字符串类(String)等,这些类是编写Java经常用到的。这个包是虚拟机自动引入的包,也就是说,即使程序中没有提供“import java.lang.*”语句,这个包都会被自动引入
- java.awt包——抽象窗口工具箱包,awt是“Abstract Window Toolkit”的缩写,这个包中包含了用于构建 GUI界面的类及绘图类
- java.io包——输入/输出 包,包含各种输入流类和输出流类,如文件输入流类(FileInputStream类)及文件输出流类(FileOutputStream)等
- java.util包——提供一些实用类,如日期类(Date)和集合类(Collection)等。
- java.net包——支持TCP/IP网络协议,包含Socket类及和URL相关的类,这些类都用于网络编程。
Java 语言的关键字
- 用于类和接口的声明——class,extends,implements,interface
- 包引入和包声明——import,package
- 数据类型——boolean,byte,char,double,float,int,long,short
- 某些数据的可选值——false,true,null
- 流程控制——break,case,continue,default,do,else,for,if,return,switch,while
- 异常处理——catch,finally,throw,throws,try
- 修饰符——abstract,final,native,private,protected,public,static,synchronized,transient,volatile
- 操作符——instanceof
- 创建对象——new
- 引用——this,super
- 方法返回类型——void
Java 关键字注意事项
- 所有关键字都是小写
- friendly、sizeof不是Java语言的关键字,这是有别于C++语言的地方
- 程序中的标识符不能以关键字命名。
标识符
- 标识符的首字符必须是字母,下划线“_”、美元符号“$”或者人民币符号“¥”
- 标识符由数据 (0~9)、大写字母(A~Z)、小写字母(a~z)、下划线“_",以及美元符号"$"等组成
- 不能把关键字和保留字作为标识符。
- 标识符没有长度的限制。
- 标识符是大小写敏感的,这意味着,hello、Hello、和HELLO是3个不同的标识符
编程规范
- 类名和接口名:首字母大写
- 方法名和变量名:首字母小写
- 包名:采用小写形式
- 常量名:采用大写形式
访问控制修饰符
- 公开级别:用于public修饰,对外公开
- 受保护级别:用protected修饰,向子类及同一个包中的类公开
- 默认级别:没有访问控制 修饰符,向同一个包中的类公开
- 私有级别:用private修饰,只有类本身可以访问,不对外公开
abstract修饰符
- 用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。
- 用abstract修饰的方法表示 抽象方法
final 修饰符
- 用final修饰的类不能被 继承,没有子类
- 用final修饰的方法不能被子类方法覆盖
- 用final修改的变量表示常量,只能被赋一次值
static 修饰符
- 用static修饰的成员变量表示 静态变量,可以直接通过类名来访问
- 用static 修饰的成员方法表示 静态方法,可以直接通过类名来访问
- 用static 修饰的程序 代码块表示 静态代码块,当Java虚拟机加载类时,就会执行该代码块
Java jar命令
jar会把D:\dollapp\classes目录下(包括其子目录下)的所有类文件打包为dollapp.jar文件,并把它存放在D:\dollapp\deploy目录下
D:\dollapp\classes> jar -cvf D:\dollapp\deploy\dollapp.jar *.*
jar命令展开JAR文件的功能,在展开内容中有一个MANIFEST>MF文件,它包含了描述JAR文件的信息
D:\dollapp\classes> jar -xvf D:\dollapp\deploy\dollapp.jar
java 命令和javac会读取JAR文件中的java类。例如以下命令把dollapp.jar添加到classpath中,然后运行其中的AppMain类。
D:\dollapp> java -classpath D:\dollapp\deploy\dollapp.jar com.abc.dollapp.main.AppMain
JavaDoc标记
JavaDoc标记 | 描述 |
---|---|
@version | 指定版本信息 |
@since | 指定最早出现的版本 |
@author | 指定作者 |
@see | 生成参考其他JavaDoc文档的链接,例如:@see #getWork(方法) |
@link | 生成参考其他JavaDoc文档的链接,它和@see标记的区别在于,@link标记能够嵌入到注释语句中,为注释语句中的选定词汇生成链接。例如:<ul><li>如果 (@link #word word成员变量}不为null ,就调用{@link #speak(String) speak(String) 方法}</li></ul> |
@deprecated | 用来标明被 注释的类,变量或方法已经不提倡使用,在将来的版本中可能被废弃 |
@param | 描述方法的参数 |
@return | 描述方法的返回值 |
@throws | 描述方法抛出的异常,指明抛出异常的条件 |
Java虚拟机运行时数据区,以对象Doll beibei = new Doll("贝贝")为例
数据类型
数据类型初始化为默认值
-
整数型(byte、short、int和long)的基本类型变量的默认值为0
-
单精度浮点型(float)的基类型变量的默认值 为0.0f。
-
双精度浮点型(double)的基本类型变量的默认值为0.0d。
- 字符型(char)的基本类型变量的默认值为"\u0000"
- 布尔型的基本类型变量的默认值为false
- 引用类型的变量的默认值为null
- 数组引用类型的判断题 的默认值为null。创建了数组变量的实例后,如果 没有电焊工地为每个元素赋值,Java就会把该数组 的所有元素初始化为其相应类型
常用操作符的优先级顺序
优先级 | 操作符分类 | 操作符 |
---|---|---|
由 | 一元操作符 | !++ -- - ~ |
高 | 数学运算操作符,移位操作符 | * / % + - >> << >>> |
到 | 比较操作符 | > < >= <= != == |
低 | 逻辑操作符 | && || & | ^ |
三元操作符 | 布尔表达式?表达式1:表达式2 | |
赋值操作符 | = *= -= += /= %= |
工厂设计模式和Java反射机制
import java.util.HashMap;
import java.util.Map;
public class ShapeFactory{
public static final Integer SHAPE_TYPE_CIRCLE=1;
public static final Integer SHAPE_TYPE_RECTANGLE=2;
public static final Integer SHAPE_TYPE_LINE=3;
private static Map<Integer,String> shapes=new HashMap<Integer,String>();
/**
* 静态代码块,当Java虚拟机加载ShapeFactory类的代码时,就会执行这段代码,和类一样只执行一次。建立形状类名的对应关系
*/
static{
shapes.put(SHAPE_TYPE_CIRCLE,"Circle");
shapes.put(SHAPE_TYPE_RECTANGLE,"Rectangle");
shapes.put(SHAPE_TYPE_LINE,"Line");
}
public static Shape getShape(Integer type){
try{
String className = shapes.get(type);
//运用Java反射机制构造形状对象
return (Shape)Class.forName(className).newInstance();
}catch (Exception e){
return null;
}
}
abstract public class Shape{
abstract void draw();
}
public class Circle extends Shape{
@Override
void draw() {
System.out.println("draw a circle");
}
}
public class Rectangle extends Shape{
@Override
void draw() {
System.out.println("draw a rectangle");
}
}
public class Line extends Shape{
@Override
void draw() {
System.out.println("draw a Shape");
}
}
}