java命名规范:
包名:多单词组成时所有字母小写
类名、接口名:多单词组成时,所有单词首字母大写
变量名、方法名:多单词组成时,第一个单词首字母小写、第二个单词开始每个单词首字母大写
常量名:所有字母大写,中间下划线隔开
java中是switch结构中的表达式只能是以下6种数据类型之一:
byte、short、char、int、枚举类型、string。
Java中的数组是引用类型
如果数组中是引用数据类型,默认值为null
二位数组的外层元素初始化值为地址值,内层元素初始化值与类型有关(与一维相同)
内存分区:栈、堆、方法(包括常量池、静态域)
Arrays工具类
JAVA面向对象三条主线:
1.JAVA类及类的成员:属性、方法、构造器、代码块、内部类
2.面向对象三大特征:封装、继承、多态、(抽象)
3.其他关键字
"万事万物皆对象"
1、在java语言范畴中,我们都将功能、结构等封装到类中、通过类的实例化来调用具体的功能结构。
>Scanner、String等
>文件:File
>网络资源:URL
2、涉及到Java语言与前端Html、后端数据库交互时,前后端的结构在Java层面交互时都体现为类、对象。
引用类型的变量只可能存储null和地址值。
Java规定的4种权限(从小到大):private、缺省、protected、public
| 修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
|---|---|---|---|---|
| private | √ | |||
| 缺省 | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
4种权限均可以用来修饰类的内部结构:属性(成员变量)、方法(成员函数)、构造器、内部类
修饰类(非内部类)只能用:缺省和public
属性(成员变量)赋值先后顺序:默认初始化-显示初始化-构造器赋值-对象.方法(属性)赋值
JavaBean是一种Java语言写成的可重用组件,是指符合如下标准的Java类:
1、类是公共的 2、有一个无参构造器(public) 3、有属性,且有对应的get、set方法
package关键字(类似于C++的 namespace):
1、为了更好的实现项目中类的管理、提供包的概念
2、使用package声明类或接口所属的包,声明在源文件的首行
3、包属于标识符,遵循标识符的命名规则、规范、"见名知意"
4、每 “.” 一次,就是一层文件目录
补充:同一个包下不能定义同名的接口、类
import关键字(#include<>)
1、在源文件中显示的使用import结构导入指定包下的类、接口
2、声明在包的声明和类的声明之间
3、如果需要导入多个结构,则并列写出即可
4、可以使用“XXX.*”的方式,可以导入XXX包下的所有结构
5、如果使用的类或接口是java.lang包或者是本包下的定义的,可以省略
6、如果在源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示。
7、使用“XXX.*”方式表明可以使用XXX包下的所有结构,但如果使用的是XXX子包下的结构,则仍需要显示导入
8、import static:导入指定类或者接口中的静态结构:属性或方法
MVC:常用的设计模式之一(模型层、视图层、控制层)
模型层:数据对象封装、数据库操作类、数据库
控制层:应用界面相关、存放fragment、显示列表的适配器、服务相关、抽取的基类
视图层:相关工具类、自定义view
继承格式:class A : extends B
Java中关于继承的规定:
1、一个子类只能有一个父类
2、一个类只能有一个父类(单继承)
3、子父类是相对的概念
4、子类直接继承的父类称为直接父类,间接继承的父类称为间接父类
5、子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性(成员变量)和方法(成员函数)
6、如果我们没有显式声明一个类的父类的话,则此类继承于 java.lang.Object 类,这意味着所有的类都具有Object类的功能
方法重写:
1、子类继承父类以后,可以对父类中同名同参数的方法进行覆盖操作
2、重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法是,实际执行的是子类重写父类的方法
重写的规定:
方法的声明:权限修饰符 返回值类型 方法名(形参列表)throws 异常的类型
{//方法体}
约定俗成:子类中的叫重写的方法,父类中的叫被重写的方法
1、子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同
2、子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
3、子类不能重写父类中private的方法
4、返回值类型:
①父类被重写的方法的返回值类型是void,则子类重写方法的返回值类型只能是void
②父类被重写的方法的返回值类型是A类,则子类重写的方法的返回值类型可以是A类或A类的子类
③父类被重写的方法的返回值类型是基本数据类型,则子类重写的方法的返回值类型必须是相同的基本数据类型。
5、子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
子类和父类中同名同参数的方法要么都声明为非static的(重写),要么都声明为static的
instanceof 关键字使用:
a instanceof A:判断对象a是否是A的实例,如果是返回true
使用情景:为了避免在向下转型时出现ClassCastException异常,我们在向下转型前进行 instanceof 的判断,一旦返回true,就进行向下转型,否则不进行向下转型
JDK5.0 自动装箱与拆箱
static关键字使用:
1、使用static修饰属性,按是否使用static修饰,又分为:静态属性VS非静态属性(实例变量)
实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改
静态变量(类变量):我们创建了类的多个对象,多个对象共享一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的
静态变量随着类的加载而加载,早于对象的创建,可以通过"类.静态变量"的方式进行调用。
由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中
2、使用static修饰方法
静态方法中,只能调用静态方法或属性,非静态方法都能调用
静态方法中,不能用this和super
区分饿汉式和懒汉式
饿汉式:
坏处:对象加载时间过长
好处:线程安全
懒汉式:
坏处:线程不安全(目前)
好处:延迟对象的创建
代码块:
1、代码块作用:用来初始化类、对象
2、代码块如果有修饰的话,只能使用static
3、静态代码块(可以定义多个):
内部可以有输出语句
随着类的加载而执行、而且只执行一次
作用:初始化类的信息
静态代码块只能调用静态属性或方法,不能调用非静态结构
4、非静态代码块:
内部可以有输出语句
随着对象的创建而执行,每创建一个对象就执行一次非静态代码块
作用:可以在创建对象时,对对象的属性进行初始化
由父及子,静态先行
对属性可以赋值的位置:默认初始化、显式初始化、在代码块赋值、构造器初始化、创建对象后通过”对象.属性(方法)“的方式进行赋值
final关键字:可以用来修饰的结构:类、方法、变量 1、final用来修饰一个类:此类不能被其他类所继承 2、final用来修饰方法:表明此方法不可以被重写 3、final修饰变量:此时的"变量"就称为一个常量
4、final修饰属性,可以考虑赋值的位置有:显式初始化、在代码块中初始化、构造器中初始化
5、final修饰局部变量,尤其是final修饰形参时,表明此形参时一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,不能重新赋值
6、static final 用来修饰属性:全局常量
abstract关键字使用
1、可以用来修饰类的结构:类、方法
2、abstract修饰类:抽象类
此类不能被实例化
抽象类中一定有构造器,便于子类实例化的调用(涉及:子类对象实例化的全过程)
开发中都会提供抽象类的子类,让子类对象实例化
3、abstract修饰方法:抽象方法
抽象方法只有方法的声明,没有方法体,不能被调用
包含抽象方法的类,一定是一个抽象类。反之抽象类中可以没有抽象方法
若子类重写了父类中所有的抽象方法后,此子类方可实例化,若没有,那么此子类仍为一个抽象类
abstract不能用来修饰私有、静态、final的方法和类
接口的使用:
1、接口使用interface来定义
2、Java中,接口和类时并列的两个结构
3、如何定义接口:定义接口中的成员
JDK7以前,只能定义全局常量和抽象方法
全局常量:public static final的,但是书写时可以省略不写
抽象方法:public abstract
JDK8:除了可以定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
4、接口中不能定义构造器!!意味着接口不可以实例化。
5、Java开发中,接口通过让类去实现(implements)的方式来使用
如果实现类覆盖接口中所有的抽象方法,则此实现类可以实例化
否则,此实现类仍为抽象类
6、Java类可以实现多个接口----->弥补了Java单继承的局限性
格式:class AA extends BB impliments CC,DD,EE
7、接口与接口之间可以多继承
格式:interface CC extends AA,BB
8、接口的具体使用体现多态性
9、接口实际上可以看作一种规范