认识Java


Java简介

  • Java语言体系中,最基础的部分是Java SE,其是Java的标准版本,包含了Java的一些面向对象的特性等;Java EE是Java的企业版;Java ME用于嵌入式开发
  • JVM:Java Virtual Machine;JRE:Java Runtime Environment;JDK:Java Development Kits

安装步骤

  • 安装JDK。成功标志:java -version
  • 配置环境变量。JAVA_HOME:JDK安装路径;PATH:JDK目录文件位置(jdk目录\bin);CLASSPATH:类库文件位置(jdk目录\lib)。成功标志:javac -version

编译运行Java程序

  • Java的源代码文件以.java结尾
  • 使用编译器,也即是javac对源代码文件进行编译操作。产生.class文件,该文件是Java的字节码文件,字节码文件与Windows或者是Linux无关
  • 使用解释器,也即是java.class文件进行解释运行,注意:使用java解释时,字节码文件不需要带.class后缀名

使用Eclipse开发Java程序

  • 使用Eclipse,首先应创建一个Java project
  • 创建Java Package,创建Java程序包的目的在于便于管理Java代码,类似于命名空间
  • 运行Java程序。Run as Java Application

Java程序构成

  • 对象(object):类的实例。
  • 类(class)
  • 方法(method)
  • 实例变量

Java标识符

Java标识符由字母,数字,下划线,美元符号组成。其中,标识符首字符不能是数字。
一些约定俗称的规定:

  • 类和接口使用大驼峰式写法,如MyClass,HelloWorld
  • 方法名使用小驼峰式写法,如myName,setTime
  • 常量名使用全大写,词与词之间使用下划线连接,如SIZE_NAME

变量和常量

  • 变量,如int,实际上是一种基本类型(premitive type)
  • 常量,使用关键字final声明,不能修改的量

注释

  • //注释一行
  • /*...*/注释多行
  • /**...**/注释若干行并写入javadoc文档

Java中的object.equals()和==区别

  • 对于==,如果作用于基本数据类型的变量,则直接比较存储的值是否相等;如果比较引用类型的变量,则比较的是对象的"地址"是否相等。
  • 对于object.equals(),equals()不能作用于基本数据类型。如果没有对equals()方法进行重载,则比较的是对象的"地址";但诸如StringDate等类对equals()进行了重载,比较的是“地址”(在Java中称为引用)所指向的对象。

附录:8种基本数据类型

  • 浮点型:float(4 bytes),double(8 bytes)
  • 整型:byte(1 byte),short(4 bytes),int(4 bytes),long(8 bytes)
  • 字符型:char(2 bytes)
  • 布尔型:boolean
    注意:String不是基本数据类型

Java的boolean和数值的强制转换

  • 在C语言中,非0即是true,否则为false,但是在Java中boolean是不能和int等互转的,如While(1){}在Java中是错误的。

一维数组和二维数组

  • 一维数组:type []arrayName=new type[arrayNumber]; e.g.:int []ages={1,2,3}
  • 二维数组:type [][]arrayName=new type[row][column] e.g.:String [][]name={{"Simon","Nancy"},{"Tim","Che"}}

方法签名

访问修饰符 返回值类型 方法名(参数列表){方法体} e.g.:public void main(String args[]){...}


方法重载

所谓之方法重载,是方法名相同,但参数列表不同(参数类型/个数/顺序至少有一项不同)的方法。如下列重载的方法:

    void f(int i) {
        System.out.println("i=" + i);
    }

    void f(float f) {
        System.out.println("f=" + f);
    }

    void f(String s) {
        System.out.println("s=" + s);
    }

    void f(String s1, String s2){
        System.out.println("s1+s2="+(s1+s2));
    }

    void f(String s, int i){
        System.out.println("s="+s+",i="+i);
    }

Java的封装机制

面向对象的三大特性:封装,继承,多态


Java封装的方法

  • 在需要修饰的属性前添加修饰符,如private关键字
  • 对每个属性提供公共方法访问
  • 在公共方法中提供属性值的合法性判断语句
    e.g.:

    package com.mengngn
    
    
    public class People{
        private double height;
    
    
    
    public double getHeight(){
        return height;  
    }
    
    
    public void setHeight(double newHeight){
        if(newHeight<0) return;
        height=newHeight;
    }
    
    }

由于类名是可重复的,所以Java提供了类似命名空间的机制,包package

    //定义包。注意,包名定义应放在源程序的第一行,包名可用“.”隔开
    package PackageName

    //正如目录可以用"/"来区分层次,包可以使用"."分层
    package com.coder.chen

包名的命名规范是全小写字母,导入包的方法是:import com.coder.chen.*


内部类

类内可定义另外一个类,这就是内部类。内部类又分为:成员内部类,静态内部类,局部内部类匿名内部类

  • 匿名内部类举例

    package com.coder.chen;
    
    
    public class Outer { 
    
    
    
    public Inner getInner(final String name, String city) { 
        //匿名内部类
        return new Inner() { 
            private String nameStr = name; 
            public String getName() { 
                return nameStr; 
            } 
        };
    } 
    
    }

继承的语法

一个子类继承父类的语法:class SubClass extends SuperClass{...}


方法重写

可以对父类的方法重写,重写的方法必须与父类的方法签名一致,即返回值类型,参数类型,参数个数和方法名都必须一致。


继承的初始化顺序

继承的初始化顺序是先初始化父类再初始化子类。


final关键字

  • final修饰类则该类为最终类,不允许被继承
  • final修饰方法,则该方法不允许重写
  • final修饰属性,则该属性不需要隐式初始化,属性必须有值或者在构造函数中赋值。
  • final修饰变量,则变量是常量

super关键字

  • super在子类中使用代表父类对象
  • 访问父类方法:super.method()
  • 访问父类属性:super.property
  • 子类构造方法需要调用父类构造方法时,在子类构造方法最前面的位置:super() 多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。多态也称作动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

Java的多态


向上转型

    SuperClass c=new SuperClass();//c是父类引用,指向本类对象
    SuperClass c=new SubClass();//c是父类引用,指向的是子类对象

不能使用一个子类的引用指向父类对象


多态的实现方式

多态的实现方式:方法重写,抽象类和抽象方法和接口

  • 抽象类和抽象方法 abstract void method();

    1.用 abstract 修饰符定义抽象类
    2.用 abstract 修饰符定义抽象方法,只用声明,不需要实现
    3.包含抽象方法的类就是抽象类
    4.抽象类中可以包含普通的方法,也可以没有抽象方法
    5.抽象类的对象不能直接创建,我们通常是定义引用变量指向子类对象。

  • 接口 修饰符 interface 接口名 [extend 其它类]{//声明变量,抽象方法} e.g.:

    interface Animal {
            //编译错误,x需要初始化,因为是 static final 类型
            //int x;
            int y = 5;
            public void eat();
            public void travel();
    }
    

    多继承实现方式:修饰符 class ClassName implements Interface1,Interface2{...}
    1.接口不可实例化对象
    2.接口中所有方法均是抽象方法
    3.接口成员均是static final类型
    4.接口支持多继承