Java 面向对象开发基础

Java技术分类

Java技术分为 J2SE、J2EE和J2ME。其中J2SE就是指从1.2版本开始的JDK,它为创建和运行Java程序提供了最基本的环境。J2EE和J2ME建立在J2SE的基础上,J2EE为分布式的企业应用提供开发和运行环境,J2ME为嵌入式应用。

Java语言的特点

  1. 面向对象
  2. 跨平台
  3. 直接支持分布式的网络应用
  4. 安全和健壮性

如何建立对象的模型?

  1. 自底向上的抽象:把问题领域中的事物抽象为具体特定的属性和行为的对象; 把具有相同属性和行为的对象抽象成类;若多个类之间存在一些共性(具有相同属性和行为),把这些共性抽象到父类中。
  2. 自顶向下的分解:在建立对象模型的过程中,也包括自顶向下的分解。例如对于计算机系统,首先识别出主机对象、显示 器对象、键盘对象和打印机对象等。

面向对象的核心思想是?

  1. 万物皆为对象
  2. 每个对象都是唯一的
  3. 对象具有属性和行为
  4. 对象具有状态
  5. 对象都属于某个类,每个对象都是某个类的实例    

Java包

  1. 包的作用

  • 能够区分名字相同的类
  • 有助于实施访问权限控制
  • 有助于划分和组织 Java应用中的各个类
  1. 包的命名规范

  • 类的创建者或拥有者的信息
  • 类所软件和项目的信息
  • 类在具体软件 项目中所处位置
  • 例如,有一个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标记
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");
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值