java总结

2019年10月7日12:08:4523,649 次浏览 4884字阅读16分16秒

快捷键

自动补齐:alt+/

向下复制一行:ctrl+alt+↓

删除当前行:ctrl+D

整体取消缩进:shift+tab

数据类型

基本数据类型

  1. 数值类型:
    1. 整数:
      1. byte:8位
      2. short:16位
      3. int:32位
      4. long:64位
    2. 小数:
      1. float:32位
      2. double:64位
  2. 字符类型:char:16位
  3. 布尔类型:boolean:8位

引用数据类型

String字符串

字符串的拼接

数据类型的转换

  1. 手动转换(强制转换)
  2. 自动类型转换
    1. 两端数据类型一致
    2. 数值运算时,自动把小的类型转换为大的类型
    3. jvm在运算时,识别的最小类型为int

运算符

算术运算符(+-*/++--)

  • 0不能做除数,但被除数类型为double时结果为无限大。
  • 取余运算时,余数符号取决于被除数符号
  • 运算符最小识别int类型
short a;
a = a + 1;//a+1自动转换为int类型,复制给short a时会报错,正确代码为:a=(short)(a+1);
a+=1;//自动强制转换为short类型,等价于a=(short)(a+1);

赋值运算符(= += -= *= /=)

注意数据类型之间的转换

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

比较运算符的结果为布尔类型

三元运算符

格式:逻辑表达式?表达式1:表达式2

如果逻辑值为true,返回表达式1的值

如果逻辑值为false,返回表达式2的值

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

异或(^)

格式:逻辑表达式1^逻辑表达式2

表达式结果相同为false,不同为true

方法

  • 方法必须声明到类(class)中
  • 创建的方法要在其他的方法之外
  • 定义方法不分先后顺序

描述特征:成员变量

行为:方法

对象的创建:必须现有类再有对象

格式:类 对象名 = new 类()

JVM内存划分

JVM将内存主要划分为:

  1. 方法区(静态区):存放所有class文件和staic变量
  2. 栈:每个函数从调用到结束,对应一个栈帧的入栈和出栈
  3. 本地方法栈:存放本地方法,为Native方法服务
  4. 堆:被所有线程共享的一块区域,对象和数组都在堆上分配(带new关键字的)
  5. 程序计数器:记录当前执行到哪个指令

方法栈帧

每个方法有自己栈帧,自己的成员变量放在自己的栈帧内

使用new关键字在堆中分配空间,并将堆中地址进行赋值

引用数据类型

说明:使用new关键字创建出来的类型都是引用数据类型

存储方式:引用数据类型有两块存储空间,一个在栈中,一个在堆中,栈中存放的是堆中的地址

  • 接口
  • 数组
  • 枚举
  • 注解

构造器

定义:在创建对象时自动调用的方法。在类中找不到默认的构造器,通过反编译工具可以看到默认的构造方法。

使用:创建对象,必须和new一起使用

特点:

  • 构造器名称和当前所在类的名称相同
  • 禁止定义返回类型(不要使用void作为返回类型)
  • 在构造器中,不需要使用return语句
  • 构造器中是有返回值的,返回的是当前创建对象的引用

默认构造器的

特点:

  • 符合构造器的特点
  • 无参数的
  • 如果类A没有使用public修饰,则编译器的创建的构造器也没有public修饰,使用了public修饰,则编译器创建的编译器也使用public修饰

自定义构造器

特点:

  • 自己写的构造器,就叫自定义构造器
  • 如果自己定义了构造器,编译器就不再创建默认构造器
  • 一个类至少存在一个构造器
  • 创建对象就是在调用构造器

static修饰符

范围:修饰字段,方法,内部类

作用:确定修饰的内容是是属于类还是属于对象

特点:

  • static修饰的内容,附着类的加载而加载(当jvm把class字节码加载到虚拟机时,static修饰的成员已经自动加载到内存中了
  • 优先于对象的存在(对象时手动new出来,所以肯定是自动加载时快呗)
  • static修饰的成员被该类型的所有对象共享(该类创建出来的对象,都可以访问static成员,表面上是通过对象访问,其本质依然使用类名访问,和对象没有任何关系
  • 可以直接使用当前类的类名访问static成员(因为static修饰的成员属于类,不属于对象

深入理解变量

定义:数据类型 变量名 = 值;

类型:根据定义位置不同,分为成员变量和局部变量

注意:成员变量可以先使用后定义,局部变量必须先定义后才能使用

成员变量

定义:也称全局变量或字段,不叫属性

说明:直接定义在类中,方法的外面

分类:

  1. 类成员变量:使用static修饰的字段
  2. 实例成员变量:没有使用static修饰的字段
  3. 在方法中不能定义static变量,static属于类,方法属于对象

初始值:初始化(new)才会在内存中开辟空间,默认是有初始值的,数值型为零,字符型为null

作用域:在整个类中都有效

局部变量

定义:除了成员变量,其他的都是局部变量

分类:

  • 方法内部的变量
  • 方法的参数
  • 代码块中的变量

初始值:没有初始值,所以必须先初始化才能使用

作用域:只在它定义的大括号内生效

说明:就是一个个用来给java分类的文件夹

作用:

  • 把功能相似或相关接口组织在同一个包中,方便类的查找和使用
  • 同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别
  • 包也限定了访问权限,拥有包访问权限的类才能访问每个包中的类

语法:package 包名.子包名.子子包;

定义规则:

  1. 全部小写
  2. 域名倒写(域名倒写.模块名.组件名;)

import语句

说明:当A类和B类不再同一个包中,若A类需要使用到B类,此时就得让A类中去引入B类

修饰符

public修饰符(公共访问权限)

  • 当前类:可以访问
  • 同一包中:可以访问
  • 子孙类:可以访问
  • 其他包:可以访问

protected修饰符(子类访问权限)

  • 当前类:可以访问
  • 同一包中:可以访问
  • 子孙类:可以访问
  • 其他包:不能访问

private修饰符(类访问权限)

  • 当前类:可以访问
  • 同一包中:不能访问
  • 子孙类:不能访问
  • 其他包:不能访问

默认(包访问权限)

  • 当前类:可以访问
  • 同一包中:可以访问
  • 子孙类:不能访问
  • 其他包:不能访问

this关键字

定义:this是当前对象所创建的地址

特点:

  • 解决成员变量和参数得问题
  • 同类中实例方法互相调用,可以省略this
  • static不能和this一起使用(
  • 构造器得重载互调,this()代表得构造器名,必须写到第一行
  • this可以做为参数传递

继承

定义:在已有类中,派生出新的类,新的类中吸收已有类当中的状态和行为,并能扩展出新的能力

实质:是使用已有类作为基础,建立新的类

关键字:extends

格式:public class 子类类名 extends 父类类名{状态,行为}

继承关系:

  • 父类中成员使用public修饰,子类继承
  • 父类成员使用protected修饰,子类不同包也能继承
  • 父类成员为默认的,同包可继承,不同包不能继承
  • 父类成员使用private(只能在本类中使用)修饰,子类无法继承
  • 父类的构造器子类也无法继承(构造器必须与当前类名相同

方法覆盖

定义:当父类某个方法不适合子类本身特征时,可以进行重新定义父类中的方法

原则:

  • 方法返回类型,方法名,方法参数必须相同
  • 子类方法的访问权限比父类方法访问权限要更大或相等

判定是否为覆盖方法:

在方法前添加@override标签,编译通过,为覆盖方法,反之

super关键字

定义:在某个子类中调用父类被覆盖的方法

instanceof关键字

判断一个类是否是一个指定的类,如果是返回true,否则返回false

使用方法:类名 instanceof 类名

通常配合if使用

多态

定义:把子类对象赋给父类变量,在运行时期会表现出具体的子类特征调用子类的方法

作用:把不同子类对象都当作父类类型看待,可以屏蔽不同子类对象之间的实现差异

创建对象时,编译看左边,运行看右边

对象调用的字段为对象左边类的字段

代码块

局部代码块

直接定义在方法当中的代码块(一般结合if,while,for使用)

初始化代码块

直接定义在类中的代码块(每次创建对象时,都会执行初始化代码块)

初始化代码块本质不放到构造方法中执行

静态代码块

初始化:初始化静态代码块前加static

在加载字节码时自动调用

在主方法前执行一次,只执行一次

静态代码块随着字节码加载也加载进jvm此时main方法还没有执行,因为方法需要jvm,jvm再去调用main方法,用来做一次性初始化操作

单例设计模式

定义:通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,即一个类只有一个对象实例

特点:

  • 单例类只能由一个实例
  • 单例类必须自己创建自己的唯一实例
  • 单例类必须给所有其他对象提供这一实例

优点:

  • 控制资源的使用
  • 控制实例的产生数量,达到节省资源的目的
  • 作为通信媒介,数据共享

实现:

  1. 必须得要在该类中创建一个对象出来
  2. 私有化自己的构造器,防止外界通过构造器来创建新的对象
  3. 给外界提供一个方法,能够获取已经创建好的对象
java总结

工具类

定义:把一些经常使用的功能写在一个类中,以后使用该功能时,直接调用

工具类通常放在util/utils或tool/tools中

实现:

  • 工具类当中的方法我们一般都会设计成静态方法,直接使用类名调用
  • 如果一个工具类中的方法没有使用static,我们一般都把工具类设计为单例通过单例获取对象调用工具方法
  • 如果工具类全部使用static修饰,说明工具方法只需要使用工具类名调用即可,此时必须把工具类的构造器私有化,防止创建对象调用静态方法

包装类

定义:基本数据类型变量不是对象,不符合一切皆对象,所以,可以把基本数据类型进行包装,把基本数据类型包装一个对象,把基本数据类型变的更强大,以面向对象的思想去使用这些类型

优点:

  • 数字基本数据类型无法设为null,包装后可以
  • 包装类中给我们提供了很多方法,可以直接拿过来使用

装箱操作

定义:把基本数据类型变更包装类

实现:

Integer num = new Integer(10);
Integer num2 = Integer.valueOf(20);

自动装箱

定义:可以直接把一个基本数据类型的值赋给包装类对象

实现:

Integer i = 20;
System.out.println(i);

拆箱操作

定义:把包装类转成对应的基本数据类型

实现:

java总结

自动拆箱

可以直接把一个包装类对象赋值给基本数据类型的变量

实现:

int i1 = i;
system.out.println(i1);

字符串转成包装类型

java总结

包装类型转换为字符

java总结

基本数据类型转字符串

java总结

字符串转换为基本数据类型

java总结

字符串转boolean

java总结

valueof缓存设计

定义:当使用valueof创建一个包装类,它内部的实现会先从缓存当中查看是否已经有该存在匹配条件的值,如果有就直接返回,不会再去创建新的地址,如果没有,就去创建新的地址(缓存大小为-128-127

java总结
java总结
java总结

抽象类

抽象类特点:

  • 抽象类必须要有子类才行,不能被final修饰(抽象类一般当作父类来继承),子类没有覆盖抽象方法,子类也要是抽象类
  • 抽象类是不能创建对象的,但是抽象类有构造器,且构造器不能定义为私有化
  • 抽象类中,可以有抽象方法,也可以有非抽象方法(给子类调用)

实现:

abstract class Graph{
abstract Double getArea();
void test(){
system.out.println();
}
}

抽象方法特点:

  • 抽象方法没有方法体
  • 抽象方法必须定义在抽象类或接口中
  • 抽象方法不能是私有的private,final,static

实现:

abstract calss Graph{
abstract Double getArea();
}

抽象类与普通类的区别

  1. 普通类有的(方法,字段,构造器),抽象类都有
  2. 普通类可以创建对象,抽象类不能创建对象
  3. 抽象类可以包含抽象方法,也可以包含非抽象方法
  4. 抽象类必须有子类才有意义

接口

定义:用来约束使用者怎么做,接口就是一种规范,规定了类里必须提供的方法

内部类

作用:

  • 增强封装,把内部类隐藏在外部类中,不允许其他类访问这个内部类
  • 增加代码维护性

外部类的修饰符只能有public和默认的

内部类的修饰可以任意使用

实例内部类

直接定义在类中的一个类

在类前没有任何一个修饰符

实现:

java总结

1.如果想使用内部类,必须先创建外部类

java总结

2.在内部类中可以访问外部类当中的成员

java总结

3.在内部类中,不能有静态成员

java总结

4.外部类是不能访问内部类当中的成员

java总结

变量的访问:就近原则

java总结

局部内部类

定义:定义在方法中的内部类

特点:

  • 不能使用public,private修饰符
  • 局部类只能在定义的方法中使用
7z7z7z
  • 本文由 发表于 2019年10月7日12:08:45
  • 转载请务必保留本文链接:https://www.7z7z7z.cn/index.php/2019/10/07/java%e6%80%bb%e7%bb%93/
ArrayList底层实现 编程语言

ArrayList底层实现

ArrayList底层是用数组实现的存储 特点和数组相同: 查询效率高 增删效率低 线程不安全 常用容器: 查询数据ArrayList(最常用) 增删数据常使用LinkedList 线程安全常使用Ve...
static关键字 编程语言

static关键字

为什么static方法内不能调用非静态属性,方法 static方法加载类时就已经创建在方法区,从属于类,非静态属性,方法创建对象时才创建,储存在堆,从属于对象,类加载对象不一定加载,无法找到对应属性和...
this关键字 编程语言

this关键字

this关键字通常用于构造方法中,当一个构造方法调用另一个构造方法无法像函数一样调用,需要用this调用,且要在第一行 为什么放在第一行 java在编译时会进行校验,每个方法只能调用一次this,同时...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: