Java的介绍
Java具有三个方面的内涵
- 是一种编程语言
- 是一套开发工具
- 是一个运行环境
学习Java编程首先要掌握开发工具和运行环境的搭建与使用,Java开发环境的搭建:
什么是JDK(Java Development Kit)?
- 开发工具,Javac及基础核心类
- 运行环境,Java及核心基础类
按Java的应用环境划分?
- J2EE(Java 2 Platform Enterprise Edition)
- J2SE(Java 2 Platform Stand Edition)
- J2ME(Java 2 Platform Micro Edition)
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
JDK安装
- 直接运行Java进行检查
- 运行Java -version进行检查
- 环境变量中不能出现空格和中文字符
- Windows环境下设置cmd的默认编码方式为utf8,在注册表路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor下增加字符串"autorun",值为"chcp 65001"
- Windows环境下设置javac的编码方式为utf8,在系统->环境变量->增加用户环境变量名:"JAVA_TOOL_OPTIONS",值:"-Dfile.encoding=UTF-8"
JVM运行过程
Java反编译工具 JAD.exe
Java的基本语法
- Java代码的位置
- Java是严格区分大小写的
- Java是一种自由格式语言(程序代码分为结构定义语句和功能执行语句,功能执行语句的最后必须用;结束)
1.注释的三种方式
- //
- /*
- */
- /**
- */
2.Java中的标识符
Java中的方法,类,包不能用数字和特殊字符串和关键字开头
3.Java中的常量
整型常量 (关键字 byte(一个字节),short(两个字节),int(四个字节))
十进制(12) 十六进制(0x12) 八进制(012)
长整型常量(关键字 long(八个字节))
13L
单精度浮点数( 关键字 float(四个字节))
5.1f
双精度浮点数(关键字 double(八个字节))
2.0d
布尔常量(关键字 boolean(一个字节))
true或false
字符常量(关键字 char(两个字节))
'a' , '8' , '\u0027'
'\r' 是回车,'\n' 是换行,'\t' 是制表符,'\b' 是退格符,'\'' 是单引号,'\"' 是双引号,'\\' 是斜杠
字符串常量
"Hello world"
null 常量
null指示对象的引用为空
变量
变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据,变量必须初始化
引用数据类型(关键字 class,interface)
类,接口,数组
类型转化
自动类型转换(也叫隐式类型转换)
强制类型转换(也叫显式类型转换)(int b=(byte)a)
表达式的类型自动提升(byte[] b =1; b=b+1;)
变量的生命周期与作用域
变量要先定义再使用,但不是在变量定义之后一直都能使用
函数
形式参数:在方法调用时用于接收外部输入的数据的变量
参数类型:就是该形式参数的类型
返回值:方法在执行完毕后返还给调用他的程序的数据
返回值类型:函数要返回的结果的数据类型
实参:调用函数时实际传给函数形式参数的数据
运算符
+=,-=,==,!=,>,<,=,++,--
程序的流程控制
- 顺序结构:就是程序从上到下一行一行执行结构,中间没有判断和跳转,直到程序结束
- 选择结构
- 循环结构
if语句的选择结构
if(表达式) 语句1; else 语句2;
if(表达式)语句1; else if 语句2; else if 语句3; else 语句4;
- 每个语句可以是使用{}组成的复合语句
- 变量==布尔表达式? 语句1:语句2;
- if语句还可以嵌套使用,嵌套使用时尽量使用{}确定层次界限
switch case选择结构
while 循环语句
do while 循环语句
while(表达式) 语句;
do 语句 while(表达式);
for循环语句
for(表达式1;表达式2;表达式3;) 语句;
break与continue语句
数组
为什么会有数组?
堆内存和栈内存
静态数组
int[] a=new int[10] int[] a={1,2,3}
多维数组
int[][] xx={{1},{1,2,3},{4,5}};
面向对象的理解
三大特征
- 继承(Encapsulation)
- 封装(Inheritance)
- 多态(Polymorphism)
对象的使用
class person { int age; public void Shout(){ System.out.println(this.age);} }
对象的生命周期
对象的比较
== 运算符与equals()方法的区别?
==一般用来比较值类型,引用类型不能用==比较,equals方法专门用于比较引用类型,是比较的两个对象的值
怎样比较两个数组对象的内容是否相等
用equals
高内聚,低耦合(就是多让类内部封装起来,不能把数据直接暴露在外,这样才能降低耦合度)
构造函数
class Person{ public Person(){ } }
构造函数的重载
和一般方法的重载方法一样
this引用句柄的作用
this相当于我所在的那个对象,指向首对象地址
使用场景:
1.调用自身树形
2.调用自身构造函数
垃圾回收过程分析
finalize方法(析构函数):当对象被彻底清除之前调用
System.gc的作用 :垃圾回收
类的继承
继承的关键字extends
通过继承可以简化类的定义
Java只支持单继承,不允许多重继承
可以有多层继承
子类继承父类所有的成员变量和成员方法,但不继承父类的构造函数。在子类的构造函数中可使用语句super(参数列表)调用父类的构造函数
如果子类的构造函数中没有显式地调用父类构造函数,也没有使用this关键字调用重载的其他构造函数,则在产生子类的实例对象时,系统默认调用父类无参的构造函数
子类对象的实例化过程:
1.分类成员变量的存储空间并进行默认初始化,就是用new关键字产生对象后,对类中的成员变量进行初始化赋值
2.绑定构造函数参数,就是new一个类中所传递进的参数赋值给构造函数中的形式参数变量
3.如有this()调用,则调用相应的重载构造函数,被调用的重载构造函数执行结束后,回到当前构造函数执行
4.显示或隐式追溯调用父类的构造函数,一直到Object类为止,Object是所有Java类的最顶层父类
5.进行实例变量的显式初始化操作,也就是执行在定义成员变量时就对其赋值的语句
6.执行当前构造函数的方法体中的代码
覆盖父类的方法
1.覆盖方法必须和被覆盖的方法具有相同的方法名称,参数列表和返回值类型
2.如果在子类中调用父类中的那个被覆盖的方法,可以用super.方法的格式
3.覆盖方法时,不能使用比父类中被覆盖的方法更严格的访问权限
final 关键字:常量
- final 声明的类就不能再被继承
- final 声明的变量,即为常量,只能被赋值一次
- final 声明的方法不能被重载
- 方法中定义的内置类只能访问该方法内的final类型的局部变量,用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期,将一个形参定义成final也是可以的,这就限定了在方法中修改形式参数的值
- public static final共同标记常量时,这个常量就成了一个全局常量
Float.MAX_VALUE 最大浮点数
抽象类
Java中可以定义一些不含方法体的方法,它的方法体的实现交给该类的子类根据自己的情况去实现,这样的方法就是抽象方法,包含抽象方法的类就叫抽象类
- 抽象类必须用abstract关键字来修饰,抽象方法也必须用abstract关键字来修饰
- 抽象类不能被实例化,也就是不能用new去产生对象
- 抽象方法只需声明,不需要实现
- 含有抽象方法类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法才能被实例化,否则这个子类还是个抽象类
接口
如果一个抽象类中的所有方法都是抽象的,可以将这个类用另外一种方式来定义,也就是接口的定义。接口是抽象方法和常量值定义的集合,从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和常量的定义而没有变量和方法的实现
- 接口的成员都是public访问类型的,接口里的常量默认是用public static final 标识的
- 可以定义一个新的接口,用extends关键字去继承一个已存在的接口
- 也可以定义一个类用implements关键字去实现一个接口中所有的方法,还可以去定义一个抽象类用implements关键字去实现一个接口中定义的所有方法
- 一个类可以继承一个父类的同时,还可以实现一个或多个接口,extends关键字必须位于implements之前
对象的类型转换
- 子类对象可以自动转换为父类
- 父类转换为子类必须强制转换
- instanceof操作符可以用来判断一个实例对象是否属于一个类
- Object类可以重写equals方法
类的多态性
1.应用程序不必为每一个派生类(子类)编写功能调用,只需要对抽象基类进行处理即可。
2.派生类的功能可以被基类的引用变量引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。
异常
异常定义了程序中遇到的非致命的错误,而不是编译时的语法错误,如程序要打开一个不存在的文件,网络连接中断,操作数越界,装载一个不存在的类等。
异常定义了
try catch语句
throws 关键字
throw 关键字
- 一个方法被覆盖时,覆盖它的方法必须扔出相同的异常或异常的子类。
- 如果父类扔出多个异常,那么重写方法必须扔出那些异常的一个子集,也就是说不能扔出新的异常。
包
package语句作为Java源文件的第一条语句,如果没有package语句,则为缺省无名包
import语句
访问控制
类本身也有访问控制,即在定义类的class关键字前加上访问控制符,但类本身只有两种访问控制,即public和默认,父类不能是private和protected,否则子类无法继承。public修饰的类能被所有的类访问,默认修饰(即class关键字前没有访问控制符)的类,只能被同一包中的所有类访问。
Java的命名习惯
- 包中的字母一律小写
- 类名,接口名应当使用名词,每个单词的首字母大写
- 方法名,第一个字母小写,后面每个单词的首字母大写
- 变量名,第一个字母小写,后面每个单词的首字母大写
- 常量名中的每个字母一律大写
Jar 文件
jar - cvf 创建jar包,并列出详细信息
jar - tvf 列出jar包的目录
jar - tvf > 1.txt 把jar包中的目录输出到1.txt中
jar - xvf 解压jar包,并列出详细信息