Java学习总结(期末篇)
初识Java
1.1 Java语言概述
1.1.1
Java名称来历:(从最初的Oak(橡树)到工程师们边喝咖啡边讨论着,看看手上的咖啡,联想到印度尼西亚有一个盛产咖啡的岛屿Java(中文名叫爪哇),于是将其更名Java。)
1.1.2
Java语言的现状:为了满足不同人员的开发需求,Java开发分成了以下三个方向:
Java SE:主要用于桌面程序的开发。是学习Java EE和Java 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.java(Java语言是区分大小写的,因此这里不能写成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:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
java.lang.reflect:java 反射编程包;
java.net:进行网络编程开发包。
java.sql:进行数据库开发的支持包。
java.util:是java提供的工具程序包。(集合类等) 非常重要
java.io:I/O:编程开发包
1.4 包的访问权限控制:我们已经知道了public和private成员只能被类的内部使用,如果某个成员不包含public、private修饰,那么这个成员可以在这个包内部被其他的类访问,但不能被包外部的类访问,即包访问权限(或默认权限,default)。
2、继承
2.0、 继承:为了代码复用
(is - a 的关系)
2.1、 关键字: 子类(派生类) extends 父类
使用 extends 指定父类.
2.2、 子类继承了父类的什么?
继承了除构造方法外所有的东西,帮助父类进行构造
子类会继承父类的所有 public 的字段和方法,对于父类的 private 的字段和方法, 子类中是无法访问的,子类的实例中,也包含着父类的实例。可以使用 super 关键字得到父类实例的引用
2.3、 可以使用 super 关键字得到父类实例的引用(必须放在第一行)
2.4、 子类构造必须先要构造父类
2.5、 基类 / 父类只能访问自己的成员
2.6、 Java是单继承,只能继承一个类,要实现多继承可以使用接口
Java 中一个子类只能继承一个父类 (而C++/Python等语言支持多继承)
2.7、 继承方式还有多层继承, 即子类还可以进一步的再派生出新的子类,一般我们不希望出现超过三层的继承关系. 如果继承层 次太多, 就需要考虑对代码进行重构了
2.8、 protected:多用在继承上
对于类的调用者来说, 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.0、 final 关键字
曾经我们学习过 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)
3、static修饰的方法不能重写,普通方法可以重写
- JavaFX
JavaFX是用于构建富Internet应用程序的Java库。 使用此库编写的应用程序可以跨多个平台一致地运行。 使用JavaFX开发的应用程序可以在各种设备上运行,例如台式计算机,移动电话,电视,平板电脑等。
要使用Java编程语言开发GUI Applications程序,程序员依赖于诸如Advanced Windowing Toolkit和Swing 。 在JavaFX出现之后,这些Java程序员现在可以使用丰富的内容有效地开发GUI应用程序。
为了开发具有丰富功能的Client Side Applications ,程序员过去依赖于各种库来添加诸如媒体,UI控件,Web,2D和3D等功能.JavaFX在单个库中包含所有这些功能。 除此之外,开发人员还可以访问Java库的现有功能,例如Swing 。
JavaFX提供了丰富的图形和媒体API,并通过硬件加速图形利用现代Graphical Processing Unit 。 JavaFX还提供了接口,开发人员可以使用这些接口组合图形动画和UI控件。
可以将JavaFX与基于JVM的技术一起使用,例如Java,Groovy和JRuby。 如果开发人员选择JavaFX,则无需学习其他技术,因为任何上述技术的先验知识都足以使用JavaFX开发RIA。
- 学习总结:
学了Java这么久总得知道为什么要学Java,我的第一门编程语言是C语言,C语言是面向过程的,于是自己就还想学习一门面向对象的编程语言,那么面向对象和面向过程有什么区别呢?可以拿造一辆汽车为例,汽车是由很多部件构成的,如果我们单纯的按照面向过程去制造的话,试想制造的出来吗?C语言可以把每一个部件按逻辑,这一步该怎么做,下一步该怎么做一步步的走下来,直到完成。但是我们把所有的部件全部制造出来以后,它是一辆汽车吗?它还不是,我们还没有组装呢!当我们把这些部件全部都放在一起拼装以后,我们就形成了一个对象--汽车!怎么把这些部件组装起来就是面向对象。面向对象(包括面向过程)也可以说是从宏观的角度出发思考问题,而面向过程是从微观方面去思考问题。这就是为什么要学习面向对象的理由。因为面向对象编程才与现实挂钩。能够对现实世界建模,较完善较灵活的组织结构。

浙公网安备 33010602011771号