环境搭建
JDK的安装
JDK:Java Development Kit,Java开发工具包,它提供了Java的开发环境和运行工具
JRE:Java Runtime Enviroment,Java运行环境,它面向的是Java程序的使用者
JDK中包含JRE
环境变量的配置
JDK解压后的bin目录配置到系统的PATH环境变量中,目的是为 了将JDK中bin目录下的exe可执行程序可以在任意目录执行
其配置步骤如下:
-
找到JDK安装目录(默认在C:\Program Files\jdk目录下)
-
打开我的电脑-->属性-->高级系统设置-->环境变量-->新建-->将jdk 的bin目录设置进去,点击确定
验证JDK是否安装成功:windows+R:打开命令行窗口,输入java -version 出现JDK版本号,即安装成功
符号与关键字
Java语言是一门强类型的语言,所有变量都必须先声明、后使用
注释
单行注释:在程序中注释一行代码,使用双斜线(//),放在需要注释的内容前
多行注释:一次性地将程序中多行代码注释掉,使用“/”和“/”将程序中需要注释的内容包含起来
文档注释:用于说明如何使用这些类,以及这些类里包含的方法。使用,使用“/*”开始,“/”结尾, 中间部分全部都是文档注释,会被提取到API文档中,
常用Javadoc标记有如下:
@author 标明开发该类模块的作者
@param 参数名参数说明
@return 返回值说明
分隔符
Java语言里的分号(;)、花括号({})、方括号([])、圆括号(())、空格、圆点(.)都具有特殊的分隔作用,因此被统称为分隔符
Java标识符
Java语言的标示符必须以字母,下划线,美元符号开头,后面可以跟任意数目的字母,数字,下划 线和美元符号
针对于类,变量或方法的标示符的命名规则:
- 对于类的命名,首字母要大写,如果由多个单词组成,那么每个单词的首字母都大写(驼峰 命名法)。
- 对于变量和方法与类相同,需要第一个单词的首字母要小写,后面的要大写。
- 对于常量,要所有的字母都大写。
Java关键字
Java的所有关键字都是小写的,TRUE、FALSE和NULL都不是Java关键字
Java一共包括48个关键字
基本数据类型和运算符
数据类型
基本类型
数值类型
整数类型
byte
short
int
long
char
浮点类型
float
double
Java语言的浮点类型默认是double类型,如果希望Java把一个浮点类型值当成float类型处理,应该在这个浮点类型后紧跟f或F
float floValue=5.12F;
double dValue=5.12;
boolean类型类型
boolean类型的数值只能是true或false,不能用0或者非0代表
基础类型的类型转换
有两种类型转换方式:自动类型转换和强制类型转换
如果希望把基本类型的值转换为对应的字符串,可以把基本类型的粗和一个空字符串进行连接
强制类型转换的语法格式是:(targetType)value
表达式类型的自动提升
当一个算术表达式中包含多个基本类型的值时,整个算术表达式的类型将自动提升。Java规定一下提升规则
- 所有的byte、short、char类型自动提升为int类型
- 整个算术表达式的类型自动提升到与表达式中最高类型变量的类型一致
- 如果表达式中包含了字符串:因为把加号(+)放在字符串和基本类型值之间时,这个加号是一个字符串连接运算符,而不是进行加法运算
引用类型:
class type
interface type
array type
null type
运算符
算术运算符
算术运算符: + 、— 、* 、/ 、%、+ +、- -
自加和自减只能用于操作变量,不能用于操作数值直接量或常量
赋值运算符
+=: 对于x += y, 即对应于x = x + y.
-=: 对于x -= y, 即对应于x = x - y.
*=: 对于x *= y, 即对应于x = x * y.
/=: 对于x /= y, 即对应于x = x / y.
%=: 对于x %= y, 即对应于x = x % y.
&=: 对于x &= y, 即对应于x = x & y.
|=: 对于x |= y, 即对应于x = x | y.
^=: 对于x ^= y, 即对应于x = x ^ y.
<<=:对于x <<= y, 即对应于x = x << y.
>>=:对于x >>= y, 即对应于x = x >> y.
>>>=:对于x >>>= y, 即对应于x = x >>> y.
比较运算符
比较运算符运算的结果是一个boolean类型的值
逻辑运算符
逻辑运算符
• &&:与(且),必须前后两个操作数都是true才返回true,否则返回false
• &: 不短路与,作用与&&相同,但不会短路
• ||:或,只要两个操作中有一个true,就可以返回true,否则返回false
• |: 不短路或,作用与||相同,但不会短路
• !:非,只需要一个操作数,如果操作数为true,返回false,如果为false,就返回true.
• ^:异或,当两个操作数不同时才返回true,如果两个操作数相同则为false
位运算符
>>>: 无符号右移运算符
三目运算符
[条件语句] ? [表达式1] : [表达式2]
运算符的结合性和优先级
流程控制
顺序结构
分支结构
if语句使用布尔表达式或布尔值作为分支条件来进行分支控制
switch语句则用于对多个整型值(JDK1.7开始支持字符串)进行匹配,从而实现分支控制
if…else
switch(expression){
case condition1:{ ...... break; }case condition2:{ ...... break; }
//可以出现更多可以出现更多case conditionN:{ ...... break;}
default:{ ...... }
}
switch语句中控制表达式的类型只能是byte、short、char和int, JDK7添加允许“字符 串”的表达式
循环结构
Java供了while、do while和for三种循环语句
除此之外,JDK1.5还提供了一种新的循环:foreach循环
foreach语句格式:
for(元素类型type 元素变量value : 遍历对象obj) {
引用x的java语句;
}
控制循环结构:continue,用return
数组
Java语言支持两种语法格式来定义数组:
type[] arrayName; //推荐使用,不仅具有更好的语意,也具有更好的可读性,
type arrayName[];
数组的初始化
静态初始化
type[] arrayName = new type[]{element1, element2 , element3 ,…}
使用花括号把所有的数组元素括起来,多个数组元素之间以英文逗号(,)隔开,定义初始化值的花括号紧跟[]之后
简化的语法格式:
type[] arrayName = {element1, element2 , …}
动态初始化
type[] arrayName = new type[length];
与静态初始化相似的,此处的type必须与定义数组时使用的type类型相同,或者是定义数组 时使用的type类型的子类
数组默认值
程序员只需指定数组的长度,即为每个数组元素指定所需的内存空间,系统将负责为这些 数组元素分配初始值
数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值是0.0
数组元素的类型是基本类型中的字符类型(char),则数组元素的值是'\u0000'
数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false
数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null
使用数组
访问数组元素都是通过在数组引用变量后紧跟一个方括号([]),方括号里是数组元素的索引值,这样就可以访问数组元素了
使用foreach循环迭代数组元素时,并不能改变数组元素的值,因此不要对foreach的循环变量进行赋值
数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的,实际的数组元素被存储在堆(heap)内存中;数组引用变量是一个引用类型的变量,被存储在栈(stack)内存中
操作数组的工具类
Java提供的Arrays类里包含了一些static修饰方法操作数组,这个Arrays类里包含了如下几个static修饰的方法:
type[] copyOf(type[] original, int newLength)
boolean equals(type[] a, type[] a2)
void sort(type[] a)
void sort(type[] a, int fromIndex, int toIndex)
String toString(type[] a)
类与对象
类
Java面向对象的三大特征:封装、继承和多态
定义类
[修饰符] class 类名{
零个到多个构造器定义..
零个到多个属性…
零个到多个方法…
}
类里各成员之间的定义顺序没有任何影响,各成员之间可以相互调用,但需要指出的是,static修饰的成员不能访问没有static修饰的成员,即静态不可以访问非静态,非静态可以访问静态
定义属性
[修饰符] 属性类型 属性名 = 默认值
定义方法
[修饰符] 方法返回值类型 |void 方法名(形参列表){
//由零条到多条可执行性语句组成的方法体
}
修饰符:修饰符可以省略,也可以是public、protected、private、static、final、abstract、其中 public、protected、private三个最多只能出现其中之一;abstract和final最多只能出现其中之一,它们可以与static组合起来修饰方法
构造器
构造器名:构造器名必须和类名相同
[修饰符] 构造器名 (形参列表){
//由零条到多条可执行性语句组成的构造器执行体
}
构造器的重载:
构造器重载和方法重载基本相似:要求构造器的名字相同。因为构造器必须与类名相同,所以同一个类的所有构造器名肯定相同.为了让系统能区分不同的构造器.多个构造器的参数列表必须不同
使用this调用另一个重载的构造器只能在构造器中使用,而且必须作为构造器执行体的第一条语句
使用this调用重载的构造器时,系统会根据this后括号里的实参来调用形参列表与之对应的构造器
类的继承(extends)
修饰符 class SubClass extends SuperClass{
//类定义部分
}
对于被private修饰的类成员变量或方法,其子类是不可见的,也即不可访问
对于定义为默认访问(没有修饰符修饰)的类成员变量或方法,只有与父类同处于一个包中的子类可以访问
对于定义为public或protected 的类成员变量或方法,所有子类都可以访问
子类中可以声明与父类同名的成员变量,对于子类来说父类的成员变量就被隐藏起来了,在子类中直接访问到的是子类中定义的成员变量
子类中也可以声明与父类相同的成员方法,包括返回值类型、方法名、形式参数都应保持一致,称为方法的覆盖(Override)
super:
Java程序创建某个类的对象时,系统会隐式创建该类的父类的对象,只要有一个子类对象存在,就一定存在一个与之对应的父类对象。在子类方法使用super引用时,super总是指向作为该方法调用的子类对象所对应的父类对象
super 的使用的两种种情况:
调用父类中被覆盖的方法
调用父类的构造函数
使用继承的注意点:
如果不想被子类访问,就将父类的方法改成用private修饰
如果不想被子类方法复写,就将父类方法改成用final修饰
如果父类的某个方法希望被子类访问,而不希望被其它类访问,则用protected修饰
尽量不要在父类构造器中调用将要被子类重写的方法
多态
多态有3个条件:
- 继承
- 重写(子类重写父类继承的方法)
- 父类引用指向子类对象
如果子类覆盖了父类的方法,则执行子类的方法;否则执行父类的方法。在编译的时候,仅仅依据 对象所属的类,系统无法确定到底该执行哪个类的方法,只有到运行的时候才能确定,故称为运行时多态
instanceof运算符:
考虑到进行强制类型转换时可能出现异常,因此进行类型转换之前先通过instanceof运算符来判断是否可以成功转换,从而避免出现ClassCastException异常。这样可以让程序更加健壮
用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是返回true
instanceof运算符的作用是:在执行强制类型转换之前,首先判断前一个对象是否是后一个类的实例,是否可以成功地转换,从而保证代码更加健壮
instanceof和(type)是java提供的两个相关的运算符,通常先用instanceof判断一个对象是否可以强制类型转换,然后再使用(type)运算符进行强制类型转换,从而保证程序不会出现错误
对象
创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例(对象)
对象的this引用
this关键字最大的作用是让类中的一个方法访问该类的另一个方法或属性
java允许对象一个成员直接调用另一个成员,可以省略this前缀。如果方法里有局部变量和属性同名, 但程序又需要在该方法里访问这个被覆盖的属性,则必须使用this来访问此属性
static特点
静态方法只能访问静态成员(属性和方法)
非静态方法既可以访问静态成员也可以访问非静 态成员
实例变量和类变量的区别
存放位置:
类变量随着类的加载而存在于方法区中
实例变量随着对象的建立而存在于堆内存中
生命周期:
类变量生命周期最长,随着类的消失而消失
实例变量生命周期随着对象的消失而消失
隐藏和封装
Java提供了四个访问控制符:private、default、protected和public;分别代表访问控制权限级别由小到大
private:private修饰的类中的成员(包括属性和方法)只能在该类的内部被访问;private最适合用于修饰属性,使属性隐藏在类的内部,类的外部不能直接该类的属性及方法
default(包访问控制权限):如果类中的一个成员(属性和方法)或者一个顶级类不使用任何访问控制符修饰,就称它是默认访问控制,default访问控制成员可以被相同包下其他类访问
protected(子类访问权限):使用protected修饰的成员(属性和方法)既可以被同一个包中其 它类访问,也可以被不同包中的子类访问。通常情况下,如果用protected来修饰方法,通常是 希望其子类来重写或只允许子类来访问这个方法
public(公共访问权限):可以被所有类访问。不管访问类和被访问类是否处于同一包中,是否 具有父子继承关系
方法
-
方法的参数传递机制
形参,实参
引用类型的参数传递
引用类型的参数传递:在最后一个形参的类型后增加三点(…),则标明该形参可以接受多个参数值,
一个方法中最多只能有一个长度可变的形参
-
递归
-
重载
方法重载的要求就是两同、一不同:同一个类中方法名相同,参数列表不同,至于方法的其他部分,如方法返回值类型、修饰符等,与方法重载没有任何关系
package和import
Java的核心类都放在java这个包及其子包下,Java扩展的许多类都放在javax包及其子包之下。这些实用类也就是前面所说的API(应用程序接口),Oracle按这些类的功能分别放在不同的包下
JavaBean规范:
Java类里属性的setter和getter方法有非常重要的意义,例如一个类里包含了一个名为abc的属性,则其对应的setter和getter方法名应为setAbc和getAbc(即将原属性名的首字母大写,并在前面分别增加set和get动词,就变成setter和getter方法名)
掌握好JavaBean规范,为是了Android请求服务器返回的数据解析到JavaBean时,使用不规范的JavaBean会导致数据取不出来,在定义接口时尽量避免不规范的JavaBean的出现