一、Java语言运行机制及运行过程
Java语言的特点:
特点一:面向对象
两个基本概念:类、对象
三大特性:封装、继承、多态
特点二:健壮性
吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
特点三:跨平台性
跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere”
原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。
Java两种核心机制:
Java虚拟机(Java Virtal Machine)
· JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
· 对于不同的平台,有不同的虚拟机。
· Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
垃圾收集机制(Garbage Collection)
· 不再使用的内存空间应回收—— 垃圾回收。
· 在C/C++等语言中,由程序员负责回收无用内存。
· Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
· 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
注释:
单行注释
格式://注释文字
多行注释
格式:/* 注释文字 */
注:
对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
多行注释里面不允许有多行注释嵌套。
文档注释(java特有)
格式:/**
* @author 指定java程序的作者
*@version 指定源文件的版本
*@param 方法的参数说明信息
*/
注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
二、Java 基本语法
关键字:
关键字的定义和特点
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
保留字:
Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。
自己命名标记符时要避免使用这些保留字
byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
标识符:
标识符:Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符凡是自己可以起名字的地方都叫标识符。
定义合法标识符规则:由26个英文字母大小写,0-9 ,_或 $ 组成 数字不可以开头。不可以使用关键字和保留字,但能包含关键字和保留字。Java中严格区分大小写,长度无限制。标识符不能包含空格。
注意:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
Java中的名称命名规范:
Java中的名称命名规范:
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
变量:
#
变量的概念:
内存中的一个存储区域
该区域有自己的名称(变量名)和类型(数据类型)
Java中每个变量必须先声明,后使用
该区域的数据可以在同一类型范围内不断变化
#
使用变量注意:
变量的作用域:一对{ }之间有效
初始化值
定义变量的格式:数据类型 变量名 = 初始化值
#
变量是通过使用变量名来访问这块区域的
算术运算符:
赋值运算符:
符号:=
当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
支持连续赋值。
扩展赋值运算符:+=, -=, *=, /=, %=
比较运算符:
逻辑运算符:
位运算符:
程序流程控制:
#
顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。
#
分支结构
根据条件,选择性地执行某段代码。
有if…else和switch两种分支语句。
#
循环结构
根据循环条件,重复性的执行某段代码。
有while、do…while、for三种循环语句。
注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。
数组 :
#
数组是多个相同类型数据的组合,实现对这些数据的统一管理
#
数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型
#
数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量
三、Java 面向对象编程
面向对象与面向过程:
# 面向对象(OOP)与面向过程
二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为。面向对象,将功能封装进对象,强调具备了功能的对象。
面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
# 面向对象的三大特征
封装 (Encapsulation)
继承 (Inheritance)
多态 (Polymorphism)
#
OOP: Object Oriented Programming
面向过程:procedure oriented programming
面向对象的思想概述:
#
类(class)和对象(object)是面向对象的核心概念。
类是对一类事物描述,是抽象的、概念上的定义
对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
#
定义类其实是定义类中的成员(成员变量和成员方法)
Field = 属性 = 成员变量,Method = (成员)方法 = 函数
成员变量(属性)和局部变量的区别:
# 成员变量:
成员变量定义在类中,在整个类中都可以被访问。
成员变量分为类成员变量和实例成员变量,实例变量存在于对象所在的堆内存中。
成员变量有默认初始化值。
成员变量的权限修饰符可以根据需要,选择任意一个
# 局部变量:
局部变量只定义在局部范围内,如:方法内,代码块内等。
局部变量存在于栈内存中。
作用的范围结束,变量空间会自动释放。
局部变量没有默认初始化值,每次必须显式初始化。
局部变量声明时不指定权限修饰符
类的成员之二:方 法
#
语法格式:
修饰符 返回值类型 方法名 ( 参数列表) {
方法体语句;
}
说明:修饰符:public, private, protected等。
返回值类型:return语句传递返回值。没有返回值:void。
类的访问机制:
类的访问机制:
#
在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过。)
#
在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。
#
也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
方法的重载(overload)
# 重载的概念
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
# 重载的特点:
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。
可变个数的形参
// 下面采用数组形参来定义方法
public static void test(int a ,String[] school);
// 以可变个数形参来定义方法
public static void test(int a ,String… school);
说明:
1.可变参数:方法参数部分指定类型的参数个数是可变多个
2.声明方式:方法名(参数的类型名...参数名)
3.可变参数方法的使用与方法参数部分使用数组是一致的
4.方法的参数部分有可变形参,需要放在形参声明的最后
方法的参数传递
# 方法,必须有其所在类或对象调用才有意义。若方法含有参数:
# 形参:方法声明时的参数
# 实参:方法调用时实际传给形参的参数值
# Java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
信息的封装和隐藏
Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
# 隐藏一个类中不需要对外提供的实现细节;
# 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
# 便于修改,增强代码的可维护性;
构造器(构造方法)
# 构造器的特征
它具有与类相同的名称
它不声明返回值类型。(与声明为void不同)
不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
# 构造器的作用:创建对象;给对象进行初始化
#
语法格式:
修饰符 类名 (参数列表) {
初始化语句;
}
#
根据参数不同,构造器可以分为如下两类:
隐式无参构造器(系统默认提供)
显式定义一个或多个构造器(无参、有参)
#
Java语言中,每个类都至少有一个构造器
默认构造器的修饰符与所属类的修饰符一致
一旦显式定义了构造器,则系统不再提供默认构造器
一个类可以创建多个重载的构造器
父类的构造器不可被子类继承
关键字—this
# this表示当前对象,可以调用类的属性、方法和构造器
# 当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加this来表明该变量时类成员
# 在任意方法内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性
# this可以作为一个类中,构造器相互调用的特殊格式
# 使用this()必须放在构造器的首行!
# 使用this调用本类中其他的构造器,保证至少有一个构造器是不用this的。
JavaBean
# JavaBean是一种Java语言写成的可重用组件。
#所谓javaBean,是指符合如下标准的Java类:
类是公共的
有一个无参的公共的构造器
有属性,且有对应的get、set方法
# 用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
UML类图
JDK中主要的包介绍