Java基础知识考前复习

这学期学了Java,但是很多东西都记得不是很清楚。所以想记录一下学习java需要注意的地方。

一、Java的编译过程

1、前言
Java近些年来十分火爆的主要原因就是其跨平台的特点,用Java编写程序所生成的代码并不是完全依赖于计算机的特点结构,只要有JVM环境就可以在拥有不同操作系统的计算机上运行。
开发一个Java程序有三个步骤:
1、编写源文件。
2、编译源程序。
3、运行。
其中编写源文件是编写后缀名为java的源文件,经过编译后生成的是后缀名为class的字节码文件,最后将该文件在JVM上运行。经过这三个步骤就可以完成对Java程序的开发。java文件可以查看代码,而class文件不可见。
Java具有一个独特的内存回收机制名为cg。
Java提供的命令除了java、javac外还有javadoc、 jar。一个是生成帮助文档及API和将代码归档生成一个jar包。
在这一部分有需要注意的知识点:
1、JDK是Java的标准开发包其英文名称为Java development kit。
2、JVM是Java虚拟机其英文全称是Java virtual machine,其作用是将class字节码编译成机器语言。
3、在JDK里,编译源程序的命令是javac,运行字节码的命令是java。
4、一个类对应生成一个字节码文件,即源文件定义了三个类则生成三个字节码文件,其中这三个类中只有一个public类。

二、Java的包

1、包
Java包的作用和C++中的头文件功能类似,可以对已经打包好了的程序进行调用。对写程序的人来说,打包也可以让我们更好的管理我们自己的代码。
通常我们在Java使用的是import和package,那package和import的区别在 于,package是调用整个包,而import是调用包里面的某个类。package更加的全面,而import则是为了方便使用。
常用的包有java.lang.,java.util.,java.io.,java.net.,java.sql.*,*表示通配符可以代替一切符号。
1、java.lang包是Java的核心,包括了Object类(所有类的父类)、class类、string类、数学类等一些基本的类。
2、java.util包提供了接口类、日期类、堆栈类、向量类等使用工具类。
3、java.io包提供了IO接口,可以完成数据以流的方式完成输入和输出.
4、java.net包是用于网络连接的。
5、java.sql包是用于连接数据的。
6、java.awt包则是编写apple程序时需要使用的。
需要值得注意的是,我们可以使用多条import语句来调用不同的包,但是package语句有且只能为一条,并且必须在除了注释外的第一行才可以编译通过。" * " 虽然可以表示各种字符的组合但是import lee.*只会导入lee包下的类而不会导入它的子类。

三、Java的数据类型

Java的两大类数据类型是:内置数据类型和引用数据类型。

1、内置数据类型
Java提供了八大基本类型,其中六种数字类型,一种字符型,一种布尔型。
他们分别是:byte、short、int 、long、float、double、boolean、char。

2、引用数据类型
我们可以把它看成和指针类似的东西,引用类型通常是指向一个对象,我们可以说指向对象的变量就是引用变量。对象和数组都是引用数据类型,他们的默认值都是NULL。

3、类型转换
Java的类型转换和c++类似。

4、静态数据类型
静态属性属于类,而不属于对象。一个类的非静态方法可以访问静态属性,一个静态方法不能访问非静态属性。

四、JAVA的类

1、主方法入口
Java程序的运行和C++不同,Java的函数入口main函数是在类里面。当你确定函数的入口在哪一个类里面时就要将main函数放在类里面,程序将会从这里开始运行。
书写格式为 public static void main(String [] args)其中args是一个变量名可以修改。

2、类中常用的关键字
为了满足类的一些需求和功能,常用这些关键字:public、private、protected、default、extends、static、final、instanceof、abstract、implements、throw、finally、catch等。

3、Java内输入输出的方式
目前我们学习的输入方式,是调用Java.util包定义一个Scanner变量,再使用Scanner内的方法,实现对不同输入类型的保存。输出的方式是System.out.print()的方式完成对数据的输出,不同类型的输出使用的输出方法不同。输出的快捷键是输入sout+alt+/。

4、类的封装性
类的封装性主要体现在对权限分配,例如对public、private、protected、default等关键字上。
public、private、protected在C++中已经学过了,分别表示公开、私有、受保护。在Java中多了一个default表示本包内可访问,并且在Java中默认访问权限也是default。

5、类的继承性
Java不支持多继承,但是其多态性也能的得到体现,这里涉及到接口,后面再记录。由于不能多继承,所以每一个子类都只会有一个直接父类。如果定义一个类,没有声明父类,那么默认它的父类为Object类,该类为所有类的父类。
完成内的继承需要用到extends,要说明某个类继承于哪一个父类时要使用extends。
父类和子类之间的关系是需要我们特别注意的。子类继承于父类,子类可以访问父类的非私有的属性和方法。子类通常是父类的一种扩展,在子类中会用到父类所没有的方法和属性。如果遇到了子类和父类有同名变量时,使用父类方法时,使用父类的变量,使用子类方法时,使用子类变量。如果是遇到了同名方法,就是方法的重写,这里就要使用到super具体部分在重写部分记录。
定义一个父类引用,指向一个子类对象。则该指针只能使用在父类中定义的非私有的方法和属性,不能使用子类拓展的部分。这里涉及到了重写后的方法,该如何调用的问题,等后面再记录。
定义一个子类引用,指向一个父类对象。这是错误的。
继承之后,创建一个子类对象,会先调用父类的构造函数,然后再使用子类的构造函数。当然也可以使用super()去使用父类的构造函数,该语句应该位于子类构造函数第一句。
如果使用了关键字final修饰一个类,那么这一个类将不会被继承。

6、类的多态性
由于Java不支持多继承,所以它的多态性不是体现在多继承里,而是体现在接口和父类引用指向子类对象时。一个的类虽然只能有一个直接父类,但是他们可以实现多个接口。这样一个类就可以在不同的情况下完成多种操作,这样就达到了多态性的目的。其实单一继承同样可以完成多态性这一特点,需要使用的就是动态绑定,到底是使用子类的方法还是孙类的方法,可以用这个方法去完成。重写和重载也体现了多态性。

7、类方法的重写和重载
重写(Override)和重载(Overload)是在编程中常用的一种方式,为的就是代码可以适应各种各样的情况。
重载是在一个类中存在多个方法名相同,但是参数列表却不同的方法。因为很多时候,我们的操作虽然是同一个操作,但是传递的信息可能会有所不同,但这些信息又是必要的,我们就可以采用重载的方式来解决这一个问题。虽然我们只要注意方法名和参数列表是否相同来判断是否为重载,但是我们要注意的是,我们不能通过返回类型的不同来判断是否为重载。构造方法不能被重载。
重写是在子类中重写了在父类中的方法。在调用该方法的时候,会现在子类查找该方法,如果没有就会再到父类去查找,所以就算是遇到了定义一个父类的引用指向一个子类对象,在调用该方法时,还是会使用重写后的方法,如果这时候想要调用父类的方法,这时候就要使用super。这里需要注意一下,并不是所有方法都可以被重写,静态方法只能被隐藏,而不能被重写。
只有静态方法和属性才能被隐藏。这时候就是调用子类对象就是用子类属性,调用父类对象就使用父类属性。使用同名的成员变量和静态方法既可以达到隐藏的效果。如果父类的一个方法被隐藏了之后,将一个子类转为父类后,就不是访问子类的哪一个同名方法,而是访问父类的同名方法。

8、类方法和实例方法
类方法是是属于类的方法,实例方法是属于对象的。言下之意就是,在没有创建对象的时候类方法可以被调用,调用方式是类名+点操作符+静态方法。实例对象的调用,必须要先创建一个对象。

9、抽象类和抽象方法
抽象类的关键字为abstract,抽象类是一个无法被实例化的类,但是可以被继承。一旦继承就必须将抽象类中的抽象函数给出具体的实现方法,才能被实例化。由于抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类。构造方法和类方法不能被声明为抽象方法。final在Java中被称为完结器,使用final声明的类不能被继承,也不能被重写。所有final不能和abstract联合使用。final声明的变量会被变成常量无法被修改。

10、特殊的抽象类—接口
接口的关键字是interface,接口的内的属性必须被static或者final修饰,其方法必须被abstract修饰。接口的实现必须通过子类,在定义子类的时候需要使用关键字implements,并且接口是可以多实现的。
一个接口不能继承一个抽象类,但是一个接口可以同时继承多个接口。
接口和抽象类的相同点:都不能被实例化,只有子类将它抽象方法全部实现后才能被实例化。
不同点:接口只有定义,而抽象方法可以在抽象类中被实现。接口需要用implements实现,抽象类只能被继承。接口中成员变量的默认修饰符为public static final,而且必须给初值。抽象类的方法可以有抽象成员变量,也可以有非抽象的,它的成员变量的默认值为default。abstract前不能加修饰符,同时方法必须以分号结尾,不带花括号。

11、接口
同步调用:类A的方法a()调用类的方法b(),一直等待b()方法执行完毕,a()方法继续往下走。
异步调用:类A的方法a()通过新起线程的方式调用类B的方法b(),代码接着直接往下执行,这样无论方法b()执行时间多久,都不会阻塞住方法a()的执行。但是这种方法,由于方法a()不等待方法b()的执行完成,在方法a()需要方法b()执行结果的情况下。必须通过一定的方式b()的执行结果进行监听。Java中,可以是使用Future+cCallable的方式做到这一点。
回调
类A的a()方法调用类B的b()方法。
类B的b()方法执行完毕主动调用类A的callback()方法,也就是一种双向的调用方式。

五、异常处理

1、异常的作用
异常处理可以使程序变得强大安全。异常处理主要是适合程序员可以控制和用户输入有误的情况,是程序可以顺利的进行。
try里面写关于对程序的输入,catch里面写遇到错误时的处理方法,throws也是处理异常的方法,它的作用是将异常抛出,交给上一级处理,如果不能处理则交给虚拟机处理。final起到了异常处理出口的作用,无论程序是否出现异常。
Java的异常分为checked异常和runtime异常。用户自定义异常都应该继承Exception基类。
RuntimeException(运行时异常):包括除数为0,数组下标越界。
非RuntimeException:该异常必须由程序员手动处理,否则不通过编译。
ArithmeticExcpetion:算术异常,是runtime的派生类。

六、集合类

由于做过c++的一些项目之后,再看到集合类,感觉十分的亲切加友好。集合类的存在让我们对于数据存储的一些方式可以更加的便捷。在c++中我们常用的是对象数组来实现,但是你在定义对象数组时,要防止一些数组越界等等的一些问题,而且一些方法需要自己去实现,而集合类则由一些自带的方法,让我们操作起来非常简单。
.add()、.get()、.remove()分别是集合类中list接口的增加、获取、删除,他们的存在让我们对于数据的增删改查操作非常轻松。
这里需要注意add方法和set方法的不同,add是放入,set是设置。add会增加一个,set则是替换一个。
set接口不能加入重复元素,但是可以排序。
Iterator接口是专门的遍历接口。
Map接口是用类似字典的方式存储信息。

ps:
集合类用来存储信息真的好香啊~
还在做数据库、数据库做了还做web,如果有时间就会把做这些的心得记录下来。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值