java基础知识总结

来源:互联网 发布:三国志9 知乎 编辑:程序博客网 时间:2024/05/30 04:55

面向对象初步
类:对于一类具备相同特征事物抽象描述
对象:类中的一个实例
标识符:Java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符.

标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。凡是可以由程序员自己命名的元素统一称之为标识符。
命名规范:
1.大小敏感
2.见名知义
3.尽量避免使用中文
4.不允许使用关键字命名
5.采用驼峰式写法
6.避免使用JDK中内置的类名称命名
7.不予许以数字开头
8.标识符之间不能包含空格
9.只允许_,$特殊符号存在
关键字:在java中一些包含特殊含义的单词(关键字全部小写)

数据类型
基本数据类型:也叫简单类型,主要包含8种
整数型:byte(1byte),short(2byte),int(4byte),long(8byte)
浮点型:float(4byte),double(8byte)
字符型:char(2byte)
布尔型:boolean(1bit)
基本数据类型进行算数运算时,系统自动将较小的数据类型转换为较大的数据类型
小类型转大类型,自动转换
大数据类型转小类型时,需要强制转换
这里写图片描述
引用数据类型:
类的引用
数组的引用

运算符
算术运算:+,-,*,/,++,–,%
扩展赋值运算:+=,-=,*=,/=,=
关系运算:>,<,==,!=,>=,<=
布尔逻辑运算:&,&&,|,||
&:逻辑与(在进行逻辑判断时,不论表达式左边的结果是否为true,始终计算表达式右边值)
&&:短路与(在进行逻辑判断时,只要表达式左边的结果为false,则右边表达不再计算)
字符串连接:+
运算符优先级:对于优先运算的表达式使用()包裹

流程控制
条件分支
if..else 主要用作与区间值的分支操作
switch:jdk1.7支持String类型 主要针对确切的值进行分支操作
switch支持类型包含:byte,short,int,char,String,枚举
循环语句
for
while
do..while
forEach(jdk1.5)
循环结束方式:
break 退出当前循环体
continue 跳过当前循环体的一次循环
return 结束方法
递归(直接递归,间接递归)
1.算法实现
2.比如文件的递归遍历

数组(数据结构)
用于存储一些相同数据类型的数据结构
数组的长度一旦定义,无法改变
数组的索引从0开始(0~length-1)
一维数组

数组的定义方式有两种:
type[] arr_name;
type arr_name[];

在数组定义中,不能指定数组的长度,而需要在数组的创建阶段来指定
正确:int[] a;
错误:int[20] b;

通过new操作符来创建数组对象,指定数组的大小,给数组元素的存储分配空间
int [] a = new int[20];
float[] b = new float[10];
String[] c = new String[5];

在创建完数组后,可以对数组进行初始化,也就是给数组的各个元素进行赋值。
静态初始化
int[] a = {1,3,5,7,9,11};
String[] s = { new String(“abc”),
new String(“123”),
new String(“xyz”)};
动态初始化
int[] a = new int[10];
for(int i = 0; i < 10; i++){
a[i] = 2 * i + 1;
}

在定义数组的时候,系统会给这个数组分配用于存放这个数组的内存空间.
这里写图片描述

Java中支持多维数组,也就是“数组的数组”。
多维数组的声明是通过每一维一组方括号的方式来实现的
二维数组:int[][],double[][]等
三维数组:float[][][],String[][][]等
当使用new 来创建多维数组时,不必指定每一维的大小,而只需要指定最左边的维的大小就可以了。

在编程中常常会遇到需要动态操纵数组,比如在运行时增加和删除数组元素,而且有时在编译时又不想确定数组大小希望它可以动态伸缩,在java中解决这一问题的方法是使用java.util包中的ArrayList类
ArrayList是List接口的一个可变长数组实现。

类之间关系
关联关系:在代码层面的表现形式为,一个类中包含另一个类的对象作为成员变量
单向关联:
单向关联
双向关联:
这里写图片描述
代码:
public class Son{
//关联关系中作为成员变量的类一般会在类中赋值
Father father = new Father();
public void getGift(){
System.out.println(“从”+father.getName()+”获得礼物”);
}
}
public class Father{
public void giveGift(){
}
}
依赖关系:在代码层面表现形式为一个的方法执行时需要其他对象
这里写图片描述
代码:
public class people{
public void read(){
System.out.println(“读的书是”+book.getName());
}
}
聚合关系:在代码层面的表现形式跟关联是一致,存在语义上的差别
这里写图片描述
public class People{
Car car;
House house;
//聚合关系中作为成员变量的类一般使用set方法赋值
public void setCar(Car car){
This.car = car;
}
public void setHouse(House house){
This.house = house;
}
public void driver(){
System.out.println(“车的型号:”+car.getType());
}
public void sleep(){
System.out.println(“我在房子里睡觉:”+house.getAddress());
}
}
组合关系:在代码层面表现形式与关联关系是一致,只存在语义上的差别,组合关系相比聚合关系是一种更紧密的关系
这里写图片描述
代码:
Public class People{
Soul soul;
Body body;
//组合关系中的成员变量一般会在构造方法中赋值
Public People(Soul soul, Body body){
This.soul = soul;
This.body = body;
}
Public void study(){
System.out.println(“学习要用灵魂”+soul.getName());
}
Public void eat(){
System.out.println(“吃饭用身体:”+body.getName());
}
}
继承关系: 面向对象最重要的特点之一,就是可以实现对类的复用。在Java中,一个类只能继承一个父类,这种方式叫做单继承。这一点和C++不一样。

实现关系:现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性。

多态性是指同名的不同方法在程序中共存。即为同一个方法定义几个版本,运行时根据不同情况执行不同的版本。调用者只需使用同一个方法名,系统会根据不同情况,调用相应的不同方法,从而实现不同的功能。多态性又被称为“一个名字,多个方法”。

super关键字
在Java类中使用super来引用父类的成分
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造器中调用父类的构造器
super的追溯不仅于直接父类

this关键字
Java中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。
构造器中指该构造器所创建的新对象
方法中指调用该方法的对象

java继承中super与this
构造器中的this表示当前正在初始化的对象引用,方法中的this表示当前正在调用此方法的对象引用。this具体用法表现在一下几个方面:

1.当具多个重载的构造器时,且一个构造器需要调用另外一个构造其,在其第一行使用this(param)形式调用,且只能在第一行;

2.当对象中一个方法需要调用本对象中其他方法时,使用this作为主调,也可以不写,实际上默认就是this作为主调;

3.当对象属性和方法中的局部变量名称相同时,在该方法中需要显式的使用this作为主调,以表示对象的属性,若不存在此问题,可以不显式的写this。

其实,其牵涉到的一个问题就是变量的查找规则:先局部变量 => 当前类中定义的变量 => 其父类中定义的可以被子类继承的变量 => 父类…

super表示调用父类中相应的属性和方法。在方法中,若需要调用父类的方法时,也一定要写在第一行

继承
一个类通过对另一个类的继承,以提高类的可复用性
子类继承父类后:
1.子类可以使用父类中非私有的属性以及方法
2.java中只能单继承,一个子类只能继承一个父类,但是可以使用多重继承实现类的多继承
3.一个类可以存在多个子类
4.构造器执行不代表对象创建,一旦出现new关键字,则代表对象产生
5.子类对象在构造时必先调用父类构造器(不是创建父类对象)完成初始化操作
6.子类继承父类时,如果父类中不包含默认构造器,子类必须声明或则显示调用父类中指定的构造器
7.构造器不能被重写,但是可以在子类中通过super关键字调用父类构造器
8.在子类中可以使用super调用父类中非私有元素(成员变量,构造器,方法)

方法重写与重载
方法的重写发生在存在继承关系的子类中,由子类重写父类的方法,对方法内部改写以达到子类方法的需求
注意事项:
1.被重写的方法名称,参数(类型,个数,顺序),返回值类型必须保持与父类一致
2.子类重写父类方法时,被重写的方法访问权限不能小于父类
方法重载(overload)与方法重写(override)区别:
重写重载都是多态的一种实现策略,方法的多态,方法重载通常情况发生在同一个类中包括存在继承关系的两个类中,主要表现形式为,类中包括多个同名的方法,但是方法的参数(类型,顺序,个数)必须有一项不一致,构造器也可以重载,重载与返回值无关;重写一般发生在存在继承关系的子类中,子类重写父类的方法,被重写的方法必须保持与父类结构一致(方法名,参数,返回值),子类重写的父类方法必须保持访问修饰符范围不能小于父类,构造器不能被重写

Object类
是所有类的超类(父类)
==与equals
==在进行基本数据类型比较时,比较的是基本数据类型的数据值;在进行引用类型比较时,比较的是引用的地址;
equals默认实现也是使用==,但是可以通过对equals方法以及hashCode的重写,达到预期目的
HashCode表示对象位于jvm内存中的地址,如果两个对象的hashcode一致则代表是对象是同一个

static,final关键字
static
java中static元素与对象无关(凡是对属性,方法的调用都必须通过对象),与类直接相关,在类加载的时候,所有的static元素都会被初始化,static可以用于修饰属性,方法,类(内部类),被static修饰的元素可以直接通过”类名.属性名”,”类型.方法”直接访问,一般static元素用于不需要反复创建(对象)以及频繁使用时(一般用于工具类)
非static元素不能再static语句块(静态块,静态方法)中使用
final
用于修饰类,属性,方法;被final修饰类不可被继承,被final修饰的属性不可被改变(一般结合static用于表示常量),被final修饰的方法不允许被重写
语句块
游离块:在类中以普通代码块的形式({})存在,游离快的执行与对象构造有直接关系,在对象构造之前执行,执行次数与对象创建次数保持一致
静态块:游离块另一种表现形式,使用static关键字修饰游离块,静态块不会反复执行,一般用于资源的开启以及获取,包括数据库的驱动;静态块的执行与对象构造无关

抽象类
abstract:关键字用于修饰类,以及方法,被abstract修饰的类称之为抽象类,被abstract修饰的方法称之为抽象方法
当一个类中包含的信息(属性和方法)不足以表示一个具体对象时,此时该类会定义为抽象类,抽象类一般都会包含至少一个抽象方法
声明规范注意事项:
1.使用abstract修饰
2.抽象类包含构造器,但是不允许实例化
3.抽象类中包含已实现和未实现的方法
4.抽象类通常是由子类继承然后对类的中未实现方法进行具体实现
5.一个抽象类可以继承另一个抽象类
6.一个普通类如果继承抽象类(抽象类中包含未实现的方法),则子类必须对抽象方法进行实现

原创粉丝点击