java基础总结(一)

Java入门

1Java语言版本

J2SE(Java 2 Platform StandardEdition)标准版

      是为开发普通桌面和商务应用程序提供的解决方案

      该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发

J2ME(Java 2 Platform MicroEdition)小型版

      是为开发电子消费产品和嵌入式设备提供的解决方案

J2EE(Java 2 PlatformEnterprise Edition)企业版

     是为开发企业环境下的应用程序提供的一套解决方案

     该技术体系中包含的技术如 Servlet、Jsp等,主要针对于Web应用程序开发

 

2Java语言特性

简单性 解释性 面向对象 高性能 分布式处理  多线程  健壮性 动态

结构中立 安全性 开源 跨平台

 

           Java基础语法

1关键字

关键字概述

被Java语言赋予特定含义的单词

关键字特点

组成关键字的字母全部小写

关键字注意事项

goto和const作为保留字存在,目前并不使用

类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观

2标识符

标识符概述

就是给类,接口,方法,变量等起名字时使用的字符序列

组成规则

英文大小写字母 数字字符 $和_

注意事项

不能以数字开头 不能是Java中的关键字 区分大小写

3注释

注释概述  用于解释说明程序的文字

Java中注释分类格式

单行注释

格式: //注释文字

多行注释

格式: /*  注释文字  */

文档注释

格式:/** 注释文字 */

4常量

常量概述

在程序执行的过程中其值不可以发生改变

Java中常量分类

字面值常量  自定义常量(面向对象部分讲)

字符串常量  整数常量 小数常量    字符常量 布尔常量 空常量

5变量

变量概述

在程序执行的过程中,在某个范围内其值可以发生改变的量

变量定义格式

数据类型 变量名 = 初始化值;

6数据类型

基本数据类型:

byte short intlong float double char Boolean

引用数据类型:

类 数组 接口 …

7数据类型转换

+是一个运算符, 我们应该能够看懂,做数据的加法。

boolean类型不能转换为其他的数据类型

默认转换

byte,short,char—int—long—float—double

byte,short,char相互之间补转换,他们参与运算首先转换为int类型

强制转换

目标类型 变量名=(目标类型)(被转换的数据);

8运算符

算术运算符   +- * / % ++ --

赋值运算符   =+= -= *= /= %=

比较运算符   == != < > >= <=

逻辑运算符  & | ^ ! && ||

位运算符   << >> >>> & | ^ ~

三目运算符  (关系表达式)?表达式1:表达式2;如果条件为true,运算后的结果是表达式1;如果条件为false,运算后的结果是表达式2;

9控制语句

顺序结构 写在前面的先执行,写在后面的后执行

选择结构 if语句

if(关系表达式) {        

                        语句体

         }

if(关系表达式) {

                        语句体1;

         }else{

                        语句体2;

         }

if(关系表达式1) {

                        语句体1;

         }else  if (关系表达式2) {

                        语句体2;

         }

    …

         else{

                        语句体n+1;

         }

 

 switch语句

switch(表达式) {

               case 值1:

                            语句体1;

                            break;

                       case 值2:

                            语句体2;

                            break;

                       …

                       default:

                            语句体n+1;

                            break;

}

表达式的取值:byte,short,int,charJDK5以后可以是枚举 JDK7以后可以是String

 

循环结构

(1)for(初始化语句;判断条件语句;控制条件语句) {

        循环体语句;

    }

(2)while循环语句格式:

基本格式

  while(判断条件语句) {

        循环体语句;

   }

扩展格式

   初始化语句;

  while(判断条件语句) {

        循环体语句;

        控制条件语句;

    }

for循环语句和while循环语句可以等价转换,但还是有些小区别的

使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。

(3)do…while循环语句格式:

基本格式

   do{

        循环体语句;

  }while((判断条件语句);

扩展格式

   初始化语句;

   do{

        循环体语句;

        控制条件语句;

    }while((判断条件语句);

do…while循环至少会执行一次循环体。

for循环和while循环只有在条件成立的时候才会去执行循环体

(4)for each

10控制跳转语句

break的作用: 跳出单层循环 跳出多层循环 带标签的跳出 格式:标签名: 循环语句 标签名要符合Java的命名规则

continue的作用: 单层循环对比break,然后总结两个的区别 break  退出当前循环 continue 退出本次循环

return关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。

11方法

方法概述 方法就是完成特定功能的代码块 在很多语言里面都有函数的定义

函数在Java中被称为方法

格式:

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {

                     函数体;

                     return 返回值;

}

方法不调用不执行

方法与方法是平级关系,不能嵌套定义

方法定义的时候参数之间用逗号隔开

方法调用的时候不用在传递数据类型

如果方法有明确的返回值,一定要有return带回一个值

 

方法重载概述

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

方法重载特点

与返回值类型无关,只看方法名和参数列表 在调用时,虚拟机通过参数列表的不同来区分同名方法

12数组

数组概念

数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。

数组既可以存储基本数据类型,也可以存储引用数据类型。

数组的定义格式

格式1:数据类型[] 数组名; 格式2:数据类型 数组名[];

数组初始化概述:

Java中的数组必须先初始化,然后才能使用。

所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

数组的初始化方式

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

格式:

数据类型[] 数组名 = new 数据类型[数组长度];

数组长度其实就是数组中元素的个数。

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

格式:

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};

 

二维数组

格式1

数据类型[][] 变量名 = new 数据类型[m][n];

m表示这个二维数组有多少个一维数组

n表示每一个一维数组的元素个数

格式2

数据类型[][] 变量名 = new 数据类型[m][];

格式3

数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};

简化版格式:

数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};

 

排序

冒泡排序

相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处

for (int i = 1; i < arr.length; i++) {

                     for (int j = 0; j

                            if(arr[j]

                                   int temp =arr[j];

                                   arr[j]=arr[j+1];

                                   arr[j+1]=temp;

                            }

                     }

              }

选择排序

从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处

查找

基本查找  数组元素无序

二分查找  数组元素有序

 

 

13java内存分配

Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈 存储局部变量

堆 存储new出来的东西

方法区 (面向对象部分讲)

本地方法区 (和系统相关)

寄存器 (给CPU使用)

 

 


 

              面向对象

1面向对象思想概述

面向对象是基于面向过程的编程思想

面向对象思想特点

是一种更符合我们思想习惯的思想可以将复杂的事情简单化将我们从执行者变成了指挥者角色发生了转换

面向对象开发就是不断的创建对象,使用对象,指挥对象做事情。

面向对象设计其实就是在管理和维护对象之间的关系。

面向对象特征封装(encapsulation)继承(inheritance)多态(polymorphism)

2类与对象的关系

类:是一组相关的属性和行为的集合

对象:是该类事物的具体体现

3成员变量和局部变量区别:

(1)在类中的位置不同

成员变量类中方法外

局部变量方法内或者方法声明上

(2)在内存中的位置不同

成员变量堆内存

局部变量栈内存

(3)生命周期不同

成员变量随着对象的存在而存在,随着对象的消失而消失

局部变量随着方法的调用而存在,随着方法的调用完毕而消失

(4)初始化值不同

成员变量有默认的初始化值

局部变量没有默认的初始化值,必须先定义,赋值,才能使用。

4匿名对象

匿名对象:就是没有名字的对象。是对象的一种简化表示形式

匿名对象的两种使用情况

对象调用方法仅仅一次的时候作为实际参数传递

5封装

封装概述

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处:

隐藏实现细节,提供公共的访问方式提高了代码的复用性提高安全性。

封装原则:

将不需要对外提供的内容都隐藏起来。把属性隐藏,提供公共方法对其访问。

private关键字:是一个权限修饰符。

可以修饰成员(成员变量和成员方法) 被private修饰的成员只在本类中才能访问。

private最常见的应用:

把成员变量用private修饰

提供对应的getXxx()/setXxx()方法

一个标准的案例的使用

 

this:代表所在类的对象引用 方法被哪个对象调用,this就代表那个对象 局部变量隐藏成员变量时用this

6构造方法

构造方法作用概述给对象的数据进行初始化

构造方法格式

方法名与类名相同没有返回值类型,连void都没有没有具体的返回值

构造方法注意事项

如果你不提供构造方法,系统会给出默认构造方法

如果你提供了构造方法,系统将不再提供构造方法也是可以重载的

7static关键字

可以修饰成员变量和成员方法

static关键字特点

随着类的加载而加载优先于对象存在 被类的所有对象共享 这也是我们判断是否使用静态关键字的条件 可以通过类名调用

static关键字注意事项

在静态方法中是没有this关键字的

静态方法只能访问静态的成员变量和静态的成员方法

8静态变量与成员变量的区别

(1)所属不同

静态变量属于类,所以也称为为类变量

成员变量属于对象,所以也称为实例变量(对象变量)

(2)内存中位置不同

静态变量存储于方法区的静态区

成员变量存储于堆内存

(3)内存出现时间不同

静态变量随着类的加载而加载,随着类的消失而消失

成员变量随着对象的创建而存在,随着对象的消失而消失

(4)调用不同

静态变量可以通过类名调用,也可以通过对象调用

成员变量只能通过对象名调用

9代码块

在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块

局部代码块

在方法中出现;限定变量生命周期,及早释放,提高内存利用率

构造代码块

在类中方法外出现;多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行

静态代码块在类中方法外出现,加了static修饰

在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且值执行一次。

 

10继承

继承概述

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,

那么多个类无需再定义这些属性和行为,只要继承那个类即可。

通过extends关键字可以实现类与类的继承 class 子类名 extends 父类名 {} 

单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。

有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,

还可以定义自己的新成员。

继承的好处

提高了代码的复用性多个类相同的成员可以放到同一个类中提高了代码的维护性

如果功能的代码需要修改,修改一处即可

让类与类之间产生了关系,是多态的前提其实这也是继承的一个弊端:类的耦合性很强

注意事项

Java只支持单继承,不支持多继承.   Java支持多层继承(继承体系)

子类只能继承父类所有非私有的成员(成员方法和成员变量)

其实这也体现了继承的另一个弊端:打破了封装性

子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。

不要为了部分功能而去继承

继承中类之间体现的是:”is a”的关系。

子类中所有的构造方法默认都会访问父类中空参数的构造方法

 

11super关键字

super的用法和this很像

this代表本类对应的引用。

super代表父类存储空间的标识(可以理解为父类引用)

用法(this和super均可如下使用)

访问成员变量

this.成员变量          super.成员变量

访问构造方法

this(…)              super(…)

访问成员方法

this.成员方法()        super.成员方法()

 

12方法重写

方法重写概述

子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写。

使用特点:

如果方法名不同,就调用对应的方法

如果方法名相同,最终使用的是子类自己的

方法重写的应用:

当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

 

13final关键字

final关键字是最终的意思,可以修饰类,成员变量,成员方法。

修饰类,类不能被继承

修饰变量,变量就变成了常量,只能被赋值一次

修饰方法,方法不能被重写

 

14多态

多态概述 某一个事物,在不同时刻表现出来的不同状态。

多态前提和体现

有继承关系     有方法重写     有父类引用指向子类对象

成员访问特点

成员变量编译看左边,运行看左边

成员方法编译看左边,运行看右边

静态方法编译看左边,运行看左边

多态的好处

提高了程序的维护性(由继承保证)  提高了程序的扩展性(由多态保证)

多态的弊端

不能访问子类特有功能

多态的转型

向上转型

从子到父父类引用指向子类对象

向下转型

从父到子父类引用转为子类对象

 

15抽象

抽象类特点 抽象类和抽象方法必须用abstract关键字修饰

格式

abstract class 类名 {}

public abstract void eat();

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类 抽象类不能实例化

成员特点

成员变量可以是变量 也可以是常量

构造方法

有构造方法,但是不能实例化用于子类访问父类数据的初始化

成员方法

可以有抽象方法限定子类必须完成某些动作

也可以有非抽象方法提高代码复用性

 

16接口

接口特点

接口用关键字interface表示

格式:interface 接口名 {}

类实现接口用implements表示

格式:class 类名 implements 接口名 {}

接口不能实例化

按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态。

接口的子类

要么是抽象类 要么重写接口中的所有抽象方法

接口成员特点

成员变量只能是常量 默认修饰符 publicstatic final

构造方法 没有,因为接口主要是扩展功能的,而没有具体存在

成员方法只能是抽象方法 默认修饰符 publicabstract

 

类与类,类与接口,接口与接口之间的关系

类与类

继承关系,只能单继承,但是可以多层继承

类与接口

实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口

接口与接口

继承关系,可以单继承,也可以多继承

 

17抽象类和接口的区别

成员区别

抽象类变量,常量;有抽象方法;抽象方法,非抽象方法

接口常量;抽象方法

关系区别

类与类继承,单继承

类与接口实现,单实现,多实现

接口与接口继承,单继承,多继承

设计理念区别

抽象类被继承体现的是:”is a”的关系。共性功能

接口被实现体现的是:”like a”的关系。扩展功能

 

18包

包的概述其实就是文件夹  作用:对类进行分类管理

定义包的格式 package 包名; 多级包用.分开即可

注意事项:

package语句必须是程序的第一条可执行的代码

package语句在一个java文件中只能有一个

如果没有package,默认表示无包名

导包概述

不同包下的类之间的访问,我们发现,每次使用不同包下的类的时候,都需要加包的全路径。比较麻烦。这个时候,java就提供了导包的功能。

导包格式 import 包名;

19权限修饰符

                        public      protected     默认      private

同一类中                  √         √         √         √

同一包,子类和其他类       √         √         √

不同包子类                √         √

不同包的其他类            √

类:默认,public,final,abstract

我们自己定义:public居多

成员变量:四种权限修饰符均可,final,static

我们自己定义:private居多

构造方法:四种权限修饰符均可,其他不可

我们自己定义:public 居多

成员方法:四种权限修饰符均可,fianl,static,abstract

我们自己定义:public居多

 

20内部类

概述把类定义在其他类的内部,这个类就被称为内部类。

内部类的访问特点:

内部类可以直接访问外部类的成员,包括私有。

外部类要访问内部类的成员,必须创建对象。

成员内部类

外界如何创建对象

外部类名.内部类名对象名 = 外部类对象.内部类对象;

成员内部类的常见修饰符

private 为了保证数据的安全性

static 为了让数据访问更方便

局部内部类

可以直接访问外部类的成员

可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能

局部内部类访问局部变量的注意事项:

必须被final修饰? 因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。为了让数据还能继续被使用,就用final修饰

  匿名内部类

就是内部类的简化写法。

前提:存在一个类或者接口

这里的类可以是具体类也可以是抽象类。

格式:

new 类名或者接口名() {重写方法;}

本质:

是一个继承了类或者实现了接口的子类匿名对象

 

异常

异常:异常就是Java程序在运行过程中出现的错误。

异常处理方案

try…catch…finally

try是检测异常,catch是用来捕获异常的,finally是用来结束资源的

finally的特点

被finally控制的语句体一定会执行

特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))

finally的作用

用于释放资源,在IO流操作和数据库操作中会见到

 

throws

用在方法声明后面,跟的是异常类名

可以跟多个异常类名,用逗号隔开

表示抛出异常,由该方法的调用者来处理

throws表示出现异常的一种可能性,并不一定会发生这些异常

 

throw

用在方法体内,跟的是异常对象名

只能抛出一个异常对象名

表示抛出异常,由方法体内的语句处理

throw则是抛出了异常,执行throw则一定抛出了某种异常 

 

自定义异常

当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类

自定义异常步骤:

1.编写异常类,继承Exception或者RuntimeException

2.编写构造方法,继承父类的实现

3.实例化自定义异常对象

4.处理异常

 

子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。

如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常

如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

 

               常用类

1Object类

Object类概述

类层次结构的根类

所有类都直接或者间接的继承自该类

构造方法 public Object(){}

成员方法

public native int hashCode()

 

public final final nativeClass getClass()

 

public String toString(){

return getClass().getName() + "@" +Integer.toHexString(hashCode());

}

 

public booleanequals(Object obj){

  return (this == obj);

}

protected void finalize()throws Throwable { }

 

protected native Objectclone() throws CloneNotSupportedException;

 

public final native void notify();

 

public final native void notifyAll();

 

public final void wait()throws InterruptedException {

        wait(0);

    }

2 String类

String类概述

字符串是由多个字符组成的一串数据(字符序列)

字符串可以看成是字符数组

构造方法

public String()

public String(byte[] bytes)

public String(byte[] bytes,int offset,intlength)

public String(char[] value)

public String(char[] value,int offset,intcount)

public String(String original)

判断功能方法

boolean equals(Object obj)

boolean equalsIgnoreCase(String str)

boolean contains(String str)

boolean startsWith(String str)

boolean endsWith(String str)

boolean isEmpty()

获取功能方法

int length()

char charAt(int index)

int indexOf(int ch)

int indexOf(String str)

int indexOf(int ch,int fromIndex)

int indexOf(String str,int fromIndex)

String substring(int start)

String substring(int start,int end)

转换功能方法

byte[] getBytes()

char[] toCharArray()

static String valueOf(char[] chs)

static String valueOf(int i)

String toLowerCase()

String toUpperCase()

String concat(String str)

其他方法

替换功能

String replace(char old,char new)

String replace(String old,String new)

去除字符串两空格        

String trim()

按字典顺序比较两个字符串 

int compareTo(String str)

int compareToIgnoreCase(String str)

 

StringBuffer类概述

我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题

线程安全的可变字符序列

添加功能

public StringBuffer append(String str)

public StringBuffer insert(int offset,Stringstr)

删除功能

public StringBuffer deleteCharAt(int index)

public StringBuffer delete(int start,intend)

替换功能

public StringBuffer replace(int start,intend,String str)

反转功能   

 public StringBuffer reverse()

截取功能

public String substring(int start)

public String substring(int start,int end)

 

StringBuilder

线程不安全的可变字符序列

 

3Arrays类

Arrays类概述

针对数组进行操作的工具类。

提供了排序,查找等功能。

成员方法

public static String toString(int[] a)

public static void sort(int[] a)

public static int binarySearch(int[] a,intkey)

 

4包装类

将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。

常用的操作之一:用于基本数据类型与字符串之间的转换。

基本类型和包装类的对应

Byte,Short,Integer,Long,Float,Double  Character,Boolean

Integer类概述

Integer 类在对象中包装了一个基本类型 int 的值

该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法

JDK1.5以后,简化了定义方式。

Integer x = new Integer(4);可以直接写成

Integer x = 4;//自动装箱。

x  =x + 5;//自动拆箱。通过intValue方法。

 

5Math类

Math类概述

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

成员方法

public static int abs(int a)

public static double ceil(double a)

public static double floor(double a)

public static int max(int a,int b) min自学

public static double pow(double a,double b)

public static double random()

public static int round(float a) 参数为double的自学

public static double sqrt(double a)

 

6Random类

Random类概述

此类用于产生随机数

如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。

构造方法

public Random()

public Random(long seed)

 

7 System类

System类概述

System 类包含一些有用的类字段和方法。它不能被实例化。

成员方法

public static void gc()

public static void exit(int status)

public static long currentTimeMillis()

public static void arraycopy(Object src,intsrcPos,Object dest,int destPos,int length)

 

8Date类

Date类概述

类 Date 表示特定的瞬间,精确到毫秒。

构造方法

public Date()

public Date(long date)

成员方法

public long getTime()

public void setTime(long time)

 

DateFormat类概述

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。

是抽象类,所以使用其子类SimpleDateFormat

SimpleDateFormat构造方法

public SimpleDateFormat()

public SimpleDateFormat(String pattern)

成员方法

public final String format(Date date)

public Date parse(String source)

 

9Calendar类概述

Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

成员方法

public static Calendar getInstance()

public int get(int field)

public void add(int field,int amount)

public final void set(int year,int month,intdate)

 

你可能感兴趣的:(java基础)