JAVA基础
一、 JAVA语言介绍
JavaSE:标准版。定位在个人计算机的应用。
JavaEE: 企业版。定位在服务端的应用。
JavaME:微型版。消费性电子产品应用。
面向对象基础
1、什么是面向对象
面向对象思想是强调以现实生活中存在的客观事物来构造软件系统,强调以事物对象为中心来思考、分析问题。并根据事物本质特征将其抽象为系统中的对象,作为系统的基本构成单位。
2、什么是类
类就是将众多相同或相似的对象进行抽象,类就是对象的抽象。
类由特征和行为组成,特征就是对象的属性,通常用变量来表示。
行为是对象操作的抽象,通常用方法来表示。
3、面向对象的特性
继承、 封装、 多态、唯一性
4、面向对象的三大特征
继承:一个类可以继承另外一个类,并在此基础上添加自己的特有的功能
继承要点:
1.父类也称作超类、基类、派生类等。
2.Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
3.Java中类没有多继承,接口有多继承。
4.子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
5.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。
封装:把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
封装的优点:
1、提高代码的安全性
2、提高代码的复用性
3、“高内聚”:封装细节,便于修改内部代码,提高可维护性。
4、“低耦合·”:简化外部调用,便于调用者使用,便于扩展和协作。
访问控制符:
- private 表示私有,只有自己类能访问
- default表示没有修饰符修饰,只有同一个包的类能访问
- protected表示可以被同一个包的类以及其他包中的子类访问
- public表示可以被该项目的所有包中的所有类访问
多态:指的是同一个方法调用,由于对象不同可能会有不同的行为。
多态的要点:
- 多态是方法的多态,不是属性的多态(多态与属性无关)。
- 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
- 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
5、知识点
面向对象的内存分析
JAVA虚拟机的内存:栈 stack、堆heap、方法区method area
栈的特点:
- 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)
- JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)
- 栈属于线程私有,不能实现线程间的共享!
- 栈的存储特性是“先进后出,后进先出”
- 栈是由系统自动分配,速度快!栈是一个连续的内存空间!
堆的特点如下:
- 堆用于存储创建好的对象和数组(数组也是对象)
- JVM只有一个堆,被所有线程共享
- 堆是一个不连续的内存空间,分配灵活,速度慢!
方法区(又叫静态区)特点如下:
- JVM只有一个方法区,被所有线程共享!
- 方法区实际也是堆,只是用于存储类、常量相关的信息!
- 用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等)
this关键字
this的本质:创建好对象的地址,由于构建方法创建好之前对象就已经创建,所以this代表当前的对象。
this最常的用法:
1. 在程序中产生二义性之处,应使用this来指明当前对象;普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。
2. 使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
3. this不能用于static方法中。
static关键字
static关键字生命的成员变量为静态成员变量,static修饰的成员变量从属于类,普通变量和方法从属于对象。静态方法中不可使用非静态方法。
“==”和equals
在基本类型 “==”代表比较两者的值是否相等,对于引用数据类型,“==”代表地址相同,即是同一个对象
对于基本数据类型,“==”比较的是两者的值是否相等
对于引用数据类型,“==”比较的是引用的地址是否相同,equals()方法重写比较的是两个引用的对象的内容是否相同
总结来说:
1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
super关键字
super是直接父类对象的引用,可以通过super访问父类中被子类覆盖的方法或者属性。
final关键字
final关键字的作用
1.修饰变量,被他修饰的变量不可改变,一旦赋了初值就不能被重新赋值。
2.修饰方法,该方法不可被子类重写,但可以被重载。
3修饰类,修饰的类不能被继承。
JAVA语言基础
1、字符
标识符
规则:
1.标识符必须以字母、下划线_、美元符号$开头。
2.标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
3.Java 标识符大小写敏感,且长度无限制。
4.标识符不可以是Java的关键字。
关键字:
关键字又叫做保留字,是编程语言中事先定义的、有特别意义的标识符。关键字对编译器具有特殊的意义,用于表示一种数据类型或程序的结构,关键字不能用用作变量名,方法名、类名及包名。
2、变量和常量
变量
变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
基本数据类型
JAVA一共有八种基本数据类型
数值型- byte、 short、int、 long、float、 double
字符型- char
布尔型-boolean
数组
数组的定义
数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。
数组的三个基本特点:
1. 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
2. 其元素必须是相同类型,不允许出现混合类型。
3. 数组类型可以是任何数据类型,包括基本类型和引用类型
冒泡排序基本算法
冒泡排序算法的运作如下:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public class Test {
public static void main(String[] args) {
int[] values = { 3, 1, 6, 2, 9, 0, 7, 4, 5, 8 };
bubbleSort(values);
System.out.println(Arrays.toString(values));
}
public static void bubbleSort(int[] values) {
int temp;
for (int i = 0; i < values.length; i++) {
for (int j = 0; j < values.length - 1 - i; j++) {
if (values[j] > values[j + 1]) {
temp = values[j];
values[j] = values[j + 1];
values[j + 1] = temp;
}
}
}
}
}
二分法查找
分法检索(binary search)又称折半检索,二分法检索的基本思想是设数组中的元素从小到大有序地存放在数组(array)中,首先将给定值key与数组中间位置上元素的关键码(key)比较,如果相等,则检索成功;
否则,若key小,则在数组前半部分中继续进行二分法检索; 若key大,则在数组后半部分中继续进行二分法检索。这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。