Java学习总结(期末篇)

初识Java

1.1 Java语言概述

1.1.1

Java名称来历:(从最初的Oak(橡树)到工程师们边喝咖啡边讨论着,看看手上的咖啡,联想到印度尼西亚有一个盛产咖啡的岛屿Java(中文名叫爪哇),于是将其更名Java。)

 

1.1.2

Java语言的现状:为了满足不同人员的开发需求,Java开发分成了以下三个方向:

Java SE:主要用于桌面程序的开发。是学习Java EEJava ME的基础。

Java EE:主要用于网页程序的开发。

Java ME:主要用于嵌入式系统程序的开发。

 

1.1.3

Java语言的面向对象特性:

1、简单

2、面向对象

3、分布性

4、可移植性

5、解释性

6、安全性

7、健壮性

8、多线程

9、高性能

10、多态

 

1.2 JDK环境配置(从略)

 

1.3 第一个Java程序

1.编写源代码

用文本编辑器(记事本)编写一个最基本的Java程序

 

public class MyApp{

       public static void main(String[] args){

             System.out.println("Hello World");

       }

}

 

将源代码保存到D盘,文件名需要与源代码中的公共类相同,这里是MyApp.javaJava语言是区分大小写的,因此这里不能写成myapp类似的,只能是MyApp

 

 

2、编译源代码

win+R运行,打开命令提示符(cmd)窗口将路径切换到D盘,并运行dir命令查看D盘中的文件

接着运行javac MyApp.java命令,然后使用dir命令查看D盘中的文件,然后回头去查看D盘,出现了一个名为MyApp类型为class的文件(编译好的文件)

3、运行class文件

在命令提示符窗口继续输入 java MyApp 来运行class文件,运行结果如图所示:

 

可以看到,在DOS控制台上出现了“Hello World”。

 

注:使用java命令时,不需要输入文件的扩展名,而使用javac命令时,需要输入文件的扩展名。

 

1.4 本章小结

本章学了Java语言的历史、现状及各种特性,接着配置了JDK环境,最后介绍了第一个Java应用程序,Java开发的一般流程是编写源代码、编译源代码和运行class文件。

 

熟悉Eclipse开发工具

2.1 熟悉Eclipse

 

2.1.1 Eclipse简介

它是由IBM公司投资4000万刀开发的IDE集成开发工具。是目前最流行的Java集成开发工具之一,基于Java语言编写,并且是开放源代码的、可扩展的开发工具。插件是Eclipse平台最具特色的特征之一,也是区别于其他开发工具的特征之一。

 

2.1.2 Eclipse的下载与安装(从略)

 

2.1.3 Eclipse工作台

运行eclipse.exe文件,如图出现工作台

 

 

Java语言基础

 Java程序的基本结构

一个Java程序的基本结构大体可以分为包、类、main()主方法、标识符、关键字、语句和注释等。

 

package Mr;                                   //定义包

public class Example{                         //创建类

    static int ONE=1;                         //定义类的成员变量

    public static void main(string[] args){   //定义主方法

         String var="Hello";                  //定义局部变量

         System.out.println(ONE);             //输出成员变量的值

         System.out.println(var);             //输出局部变量的值

    }

}

1、 包

1.1 (package) 是组织类的一种方式。

包可以理解为其实就是文件夹(文件目录)。

 

1.2 包的命名:通常会用公司的域名的颠倒形式。包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码

 

1.3 常见系统包:

 

java.lang:系统常用基础类(StringObject),此包从JDK1.1后自动导入。

java.lang.reflect:java 反射编程包;

java.net:进行网络编程开发包。

java.sql:进行数据库开发的支持包。

java.util:java提供的工具程序包。(集合类等) 非常重要

java.io:I/O:编程开发包

1.4 包的访问权限控制:我们已经知道了publicprivate成员只能被类的内部使用,如果某个成员不包含publicprivate修饰,那么这个成员可以在这个包内部被其他的类访问,但不能被包外部的类访问,即包访问权限(或默认权限,default)。

 

2、继承

2.0、 继承:为了代码复用

is - a 的关系)

 

2.1、 关键字: 子类(派生类) extends 父类

使用 extends 指定父类.

 

2.2、 子类继承了父类的什么?

继承了除构造方法外所有的东西,帮助父类进行构造

子类会继承父类的所有 public 的字段和方法,对于父类的 private 的字段和方法, 子类中是无法访问的,子类的实例中,也包含着父类的实例。可以使用 super 关键字得到父类实例的引用

 

2.3、 可以使用 super 关键字得到父类实例的引用(必须放在第一行)

 

2.4、 子类构造必须先要构造父类

 

2.5、 基类 / 父类只能访问自己的成员

 

2.6Java是单继承,只能继承一个类,要实现多继承可以使用接口

Java 中一个子类只能继承一个父类 (C++/Python等语言支持多继承)

 

2.7、 继承方式还有多层继承, 即子类还可以进一步的再派生出新的子类,一般我们不希望出现超过三层的继承关系. 如果继承层 次太多, 就需要考虑对代码进行重构了

 

2.8protected:多用在继承上

对于类的调用者来说, protected 修饰的字段和方法是不能访问的

对于类的 子类 同一个包的其他类 来说, protected 修饰的字段和方法是可以访问的

 

 

 

小结

Java 中对于字段和方法共有四种访问权限

private: 类内部能访问, 类外部不能访问

默认(也叫包访问权限): default:类内部能访问, 同一个包中的类可以访问, 其他类不能访问.

protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问.

public : 类内部和类的调用者都能访问

 

继承相关的代码练习:

 

Animal.java

 

public class Animal {

    protected String name;

    private int age;

    static {

        System.out.println("Animal::static{}");

    }

    {

        System.out.println("Animal::instance{}");

    }

    public Animal(String name, int age) {

        this.name = name;

        this.age = age;

        System.out.println("Animal(String,int)");

    }

 

    public String getName() {

        return name;

    }

 

    public int getAge() {

        return age;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public void setAge(int age) {

        this.age = age;

    }

 

    public void eat() {

        System.out.println(this.name+"eat()");

    }

 

    /*public void sleep() {

        System.out.println("sleep()");

    }*/

}

Cat.java

 

public class Cat extends Animal{

    private String sex;

    static{

        System.out.println("Cat::static{}");

    }

    {

        System.out.println("Cat::instance{}");

    }

 

    public Cat(String name, int age, String sex) {

        super(name, age);//必须放在第一行

        this.sex = sex;

        System.out.println("Cat(String,int,String)");

    }

/*    public void func(){

        super.sleep();

        int a = super.a;

    }*/

}

Dog.java

 

public class Dog extends Animal{

    private String sex;

    static {

        System.out.println("Dog::static{}");

    }

    {

        System.out.println("Dog::instance{}");

    }

 

    public Dog(String name,int age,String sex) {

        super(name,age);

        this.sex = sex;

        System.out.println("Dog(String,int,String)");

    }

    public void bark(){

        System.out.println(this.name + "wangwang");

    }

}

Test.java

 

public class Test {

    public static void main(String[] args) {

        Cat cat = new Cat("咪咪",2,"man");

        cat.eat();

        System.out.println("=================");

        Cat cat2 = new Cat("咪咪",2,"man");

        /*Dog dog = new Dog("豆豆",3,"man");

        dog.eat();

        dog.bark();*/

    }

}

3、组合

3.0final 关键字

曾经我们学习过 final 关键字, 修饰一个变量或者字段的时候, 表示 常量 (不能修改)

final修饰的类叫做密封类,不能被继承,限制 类被继承

 

3.1、组合

和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果

 

public class Student {

 ...

}

public class Teacher {

 ...

}

public class School {

 public Student[] students;

 public Teacher[] teachers;

}

组合

表示 has - a 语义 在刚才的例子中, 我们可以理解成一个学校中 “包含” 若干学生和教师.

继承

表示 is - a 语义 在上面的 “动物和猫” 的例子中, 我们可以理解成一只猫也 “是” 一种动物.

要注意体会两种语义的区别

 

3.2、代码块:

静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。

静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。

 

4、多态

4.1、向上转型: 父类引用子类对象,即用父类的引用, 指向一个子类的实例。父类只能调用父类自己的方法。

 

向上转型的三种方式:

直接赋值,方法传参,方法返回

 

运行时绑定:--------> 多态(运行时多态)(动态绑定)

动态绑定: Java , 调用某个类的方法, 究竟执行了哪段代码 (是父类方法的代码还是子类方法的代码) , 要看究竟这个引用指向的是父类对象还是子类对象. 这个过程是程序运行时决定的(而不是编译期), 因此称为 动态绑定

 

发生多态:(运行时多态)

1、继承---->父类需要引用子类对象(向上转型)

2、通过父类的引用,去调用子类和父类同名的覆盖方法

 

构造方法内,可否发生运行时多态?答案:可以(看下面的例子)

 

在构造器中调用重写的方法(一个坑)

一段有坑的代码. 我们创建两个类, B 是父类, D 是子类. D 中重写 func 方法. 并且在 B 的构造方法中调用 func

 

class B {

public B() {

// do nothing

func();

  }

  public void func() {

  System.out.println("B.func()");

  }

}

class D extends B {

  private int num = 1;

  @Override

  public void func() {

  System.out.println("D.func() " + num);

}

}

public class Test {

public static void main(String[] args) {

  D d = new D();

   }

}

// 执行结果

D.func() 0

构造 D 对象的同时, 会调用 B 的构造方法.

B 的构造方法中调用了 func 方法, 此时会触发动态绑定, 会调用到 D 中的 func

此时 D 对象自身还没有构造, 此时 num 处在未初始化的状态, 值为 0.

结论: “用尽量简单的方式使对象进入可工作状态”, 尽量不要在构造器中调用方法(如果这个方法被子类重写, 就会触发

动态绑定, 但是此时子类对象还没构造完成), 可能会出现一些隐藏的但是又极难发现的问题

 

注意:

1、重写时,方法不能用private

2、子类的方法权限一定要大于父类的方法权限。

public > protected > default > private

3static修饰的方法不能重写,普通方法可以重写

 

  1. JavaFX

 

JavaFX是用于构建富Internet应用程序的Java库。 使用此库编写的应用程序可以跨多个平台一致地运行。 使用JavaFX开发的应用程序可以在各种设备上运行,例如台式计算机,移动电话,电视,平板电脑等。

要使用Java编程语言开发GUI Applications程序,程序员依赖于诸如Advanced Windowing ToolkitSwing 。 在JavaFX出现之后,这些Java程序员现在可以使用丰富的内容有效地开发GUI应用程序。

 

为了开发具有丰富功能的Client Side Applications ,程序员过去依赖于各种库来添加诸如媒体,UI控件,Web2D3D等功能.JavaFX在单个库中包含所有这些功能。 除此之外,开发人员还可以访问Java库的现有功能,例如Swing 

JavaFX提供了丰富的图形和媒体API,并通过硬件加速图形利用现代Graphical Processing Unit JavaFX还提供了接口,开发人员可以使用这些接口组合图形动画和UI控件。

可以将JavaFX与基于JVM的技术一起使用,例如JavaGroovyJRuby。 如果开发人员选择JavaFX,则无需学习其他技术,因为任何上述技术的先验知识都足以使用JavaFX开发RIA

 

  1. 学习总结:

学了Java这么久总得知道为什么要学Java,我的第一门编程语言是C语言,C语言是面向过程的,于是自己就还想学习一门面向对象的编程语言,那么面向对象和面向过程有什么区别呢?可以拿造一辆汽车为例,汽车是由很多部件构成的,如果我们单纯的按照面向过程去制造的话,试想制造的出来吗?C语言可以把每一个部件按逻辑,这一步该怎么做,下一步该怎么做一步步的走下来,直到完成。但是我们把所有的部件全部制造出来以后,它是一辆汽车吗?它还不是,我们还没有组装呢!当我们把这些部件全部都放在一起拼装以后,我们就形成了一个对象--汽车!怎么把这些部件组装起来就是面向对象。面向对象(包括面向过程)也可以说是从宏观的角度出发思考问题,而面向过程是从微观方面去思考问题。这就是为什么要学习面向对象的理由。因为面向对象编程才与现实挂钩。能够对现实世界建模,较完善较灵活的组织结构。

 

posted @ 2020-06-06 21:26  没钱拜神  阅读(461)  评论(0)    收藏  举报