Java基础

来源:互联网 发布:unity3d 画虚线 编辑:程序博客网 时间:2024/06/02 01:24

基本命令

  1. 编译(Hello.java):javac Hello.java
  2. 运行(Hello.class):java Hello [arg arg arg …]
  3. 生成doc文档(-d doc 表示生成的文档放在doc目录下,执行该语句必须是public类):javadoc -d doc Hello.java

声明路径

  1. pakage com.ghc; 该语句可加到类文件开头,声明该类路径。
  2. 编译后,需把相应的.class文件放到当前目录下的com/ghc/目录下。
  3. 或者编译命令这样执行javac -d . ClassName.java,之后就自动生成了com/ghc/目录并.class文件。
  4. 执行java com.ghc.ClassName运行。
  5. 紧跟在pakage语句后,声明用到的类的路径
    import java.utils.*;
    import com.ghc.Hello;

生成jar包

  1. 生成普通jar包
    jar cvf tools.jar * 把当前目录下所有的文件打成jar包
    jar cvf zoo.jar Animal.class Dog.class 把这两个class文件打成jar包

  2. 制作可执行jar包(方法一)
    解压jar包,编辑META-INF/MANIFEST.MF文件,给jar包指定程序入口main函数,内容为:

    Manifest-Version: 1.0Created-By: 1.5.0_06 (Sun Microsystems Inc.)Main-Class: MutiThread (回车)

    (注意回车与空格,这个文件的内容排版必须标准)
    再用winzip把这些文件压缩成jar格式包,或者压成zip包,再改后缀名为jar也可

  3. 制作可执行jar包(方法二)
    控制台定位到将要被打包的.class文件根目录,新建一个文件manifest.mf,内容为

    Manifest-Version: 1.0Created-By: 1.5.0_06 (Sun Microsystems Inc.)Main-Class: MainEntry(回车)

    (注意回车与空格,这个文件的内容排版必须标准)
    MainEntry为包含main入口方法的那个类名
    再执行 jar cvfm jarname.jar manifest.mf *

  4. 运行jar包
    java -jar jarname.jar

  5. 制作jar启动入口文件
    在jar包同级目录中新建文件run.bat,内容为
    java -jar jarname.jar
    pause

修饰符

public 可以被任意类访问
protected 可以被本类内部、同包的类、所有子类访问
defalt 可以被本类内部、同包的类访问
private 可以被本类内部访问

继承复写方法,访问权限只能放大,否则编译报错

构造方法

  1. 如果该类中没有构造方法,编译器会默认生成无参构造方法。
  2. 如果该类中定义了有参构造方法,没有定义无参构造方法,那么就不会生成默认的无参构造方法了。
  3. 如果子类构造方法没有调用父类构造方法,编译器会默认调用父类无参构造方法。
  4. 如果子类构造方法没有调用父类构造方法,并且父类只定义了有参构造方法,报错。

面向对象的三大特征:封装、继承、多态

  1. 封装性:类的属性私有、方法对外
  2. 继承性:继承已有类,直接利用它的属性和方法
  3. 多态性:一个激励、多种响应,通过方法重载,覆盖,属性覆盖实现
    • 方法名子、参数列表和返回参数都和父类型一样,这样的子类方法就覆盖了父类方法
    • 如果方法名、参数列表都和父类方法一样,但是返回值类型不同,这样会报错,是不允许的,系统无法识别该执行哪个方法了
    • 只能继承一个类,可以实现多个接口

java语言是强类型、解释型语言

对类型匹配要求严格、运行时需要解释器、JVM。对应的类型为弱类型、编译型语言。

static

  • 被static修饰的变量叫类变量,有唯一的一块存储空间;
  • 不被static修饰叫实例变量,一个实例有一块空间。
  • 静态方法可以被类名直接调用
  • 静态方法只能访问静态成员
  • 非静态方法也可以访问静态成员
  • 静态方法只能被静态方法覆盖,并且没有多态现象
  • 静态类不能实例化(也不允许这样声明一个类,也就是说静态类就不存在)
  • 静态内部类可以实例化但是只能访问外部类的静态成员
  • 类中所有方法外的代码块称为,初始化代码块
  • 静态代码块在类加载的时候进行
  • 类创建时代码执行顺序
    1. 静态属性赋默认值;
    2. 静态代码块执行;
    3. 构造方法中的super()执行;
    4. 实例属性赋默认值;
    5. 非静态代码块执行;
    6. 构造方法中其他代码执行。

final

  • 被finial修饰的变量是常量,即一旦赋值不能改变的量
  • 如果是引用,可以通过该引用改变对象属性,不会赋予默认值
  • 一旦对象创建完成就不能对final对象赋值了,赋值时机为初始化属性时或者在构造函数中。
  • 被finial修饰的类不能派生子类,即不能被继承。

abstract

  • 被abstract修饰的类是抽象类,可以声明引用不能创建对象
  • 子类是抽象类,或者不是抽象类那么抽象方法必须被复写
  • 有抽象方法的类必须是抽象类

接口

  • 所有的方法都是公开抽象方法
  • 所有的变量都是公开静态常量
  • 接口最重要的作用就是解耦和(台灯发光的例子)

内部类

  • 方法操作的都是接口类型,而没有与实现类接触,认为方法与实现类是弱耦合关系
  • 方法内部定义实现类,返回接口类型,称为强制弱耦合
  • 成员内部类

    • 成员内部类可以访问外部类非静态成员
    • 成员内部类不能定义静态方法
    • 在类Test内部创建OuterClass类的成员内部类InnerClass的对象
      OuterClass.InnerClass inner = new OuterClass().new InnerClass();
  • 静态内部类

    • 静态内部类可以访问外部类的静态成员
    • 静态内部类可以定义静态方法
    • 在类Test内部创建OuterClass类的静态内部类InnerClass的对象
      OuterClass.InnerClass inner = new OuterClass.InnerClass();
  • 局部内部类
    • 局部内部类访问范围就在相应的局部范围
    • 局部内部类访问外部类的局部变量,该局部变量必须是final的
  • 匿名内部类
    • 该内部类继承自某个类或实现某个接口
    • 该内部类在整个方法中只创建了一个对象
    • 匿名内部类是局部内部类
0 0
原创粉丝点击