JAVA的基础总结

作者:孙英鹏  撰写时间:2019年5月8日

java之父是谁:詹姆斯.高斯林

Java的语言主要特点有:
面向对象的、跨平台、简单的、分布式的、健壮的、多线程的、解释型的语言

Java有哪两大机制:
(JVM)虚拟机 和 垃圾收集机制(GC)。

使用java编译:java源文件.java。

JDK:开发工具包。

JRE: java运行时环境。

JVM:虚拟机。

JRE、JDK、JVM 分别是什么?三者之间有什么联系?
分别时:JRE:java运行时环境,JDK:开发工具包,JVM:虚拟机。
联系:一层层的嵌套关系,JDK包含JRE,JRE包含JVM。

java 基本语法:
大小写敏感。
类名的首字母一定要用大写。

Java 标识符:
类名、变量名以及方法名都被称为标识符。
注意:关键字不能用作标识符。非法标识符举例:123abc、­age。

Java 基本数据类型
JAVA有两大数据类型:基本类型、引用类型。
JAVA提供了八种基本数据类型和六种数字类型(四个整数型,两个浮点型),一种字符类型和一种布尔值。

Java的包装类:
整形:
byte: Byte 占1字节, 8位 (bit)
short: Short 占2个字节,16位
int:Integer 占4个字节,32位
long:Long 占8个字节,64位

浮点型:
float:Float 占4个字节,32位
double:Double 占8个字节,64位

字符类型 ,占2个字节,16位
char:Character

布尔类型 1字节 8位
boolean:Boolean

包装类的图片:
在这里插入图片描述

装箱及拆箱 :

  1. 将基本数据类型变成包装类称为装箱
  2. 将包装类的类型变为基本数据类型称为拆箱。
  3. 在JDK1.5之后,提供了自动装箱和自动拆箱功能。

什么时候会出现精度丢失
在强制性转化下会出现精度丢失。

算术运算符:
+:加法 ­ 相加运算符两侧的值
-:减法 ­ 左操作数减去右操作数
*:乘法 ­ 相乘操作符两侧的值
/:除法 ­ 左操作数除以右操作数
%:取余 ­ 左操作数除以右操作数的余数
++:自增: 操作数的值增加1
–:自减: 操作数的值减少1
注意:自增(自减)在前面和在后面的区别:

  1. ++y(­­y):先将 y 的值自增(自减)1,然后再在当前表达式中使用 y 的值
  2. y++(y­­):先在当前表达式中使用 y 的值,然后再将 y 的值自增(自减)1。

关系运算符:

: 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。

=:检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真

<: 检查左操作数的值是否小于右操作数的值,如果是那么条件为真

<=:检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。
==:检查如果两个操作数的值是否相等,如果相等则条件为真。

!=: 检查如果两个操作数的值是否相等,如果值不相等则条件为真。

Java中 == 和 equals()方法的区别:
==是用来比较值是否相同或是比较地址。

逻辑运算符:
&&: 与,前后两个操作数必须都是true才返回true,否则返回false。

&: 不短路与,作用与&&相同,但不会短路。

||:称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。

|:不短路或,作用与

!:称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将 得到false。

^: 异或,当两个操作数不同时才返回true,如果两个操作数相同则返回false。

要声明数组吗?
必须声明数组变量,才能在程序中使用数组

数组的初始化主要有两种方式:
静态初始化和动态初始化

声明数组然后初始化,遍历
在这里插入图片描述

switch语句:可以拥有多个case语句。

Break语句:如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

switch语句:
在这里插入图片描述

While循环和do-while循环的区别:
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

Java增强型for循环:Java5 引入了一种主要用于数组的增强型for循环。但需要注意一点:Java增强型for循环只能取值,不能赋值

对象和类的概念
类:是指一个大的范围。(鸟类)
对象:是指一个范围的单调对象。(鸵鸟)
构造器:也叫构造方法或者构造函数,构造器与类名相同,没有返回值,连void都不能写;

成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候 实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

创建对象需要三步:
声明:声明一个对象,包括对象名称和对象类型。

实例化:使用关键字new来创建一个对象,只是为对象在内存中开辟空间。

初始化:使用new创建对象时,会调用构造方法初始化对象,对象中的值赋初始值。

封装一个变量

封装的优点:
1.良好的封装能够减少耦合。
2.类内部的结构可以自由修改。
3. 可以对成员变量进行更精确的控制。
4. 隐藏信息,实现细节。

实现Java封装的步骤:

  1. 修改属性的可见性来限制对属性的访问(一般限制为private)
  2. 对每个值属性提供对外的公共方法访问,也就是创建getter 和 setter方法(将实 例变量的首字母大写,在前面添加get或者set, 变成getter 和 setter方法名)

super于this关键字:
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。

初始化块与静态初始化块的区别:

  1. 不使用static修饰的是初始化块
  2. 使用static修饰的是静态初始化块

单个类中初始化块、静态初始化块、构造器的执行顺序:
静态初始化块、初始化块、构造器。
多个类的继承中初始化块、静态初始化块、构造器的执行顺序:
在继承中,先后执行父类A的静态块,父类B的静态块,后子类的静态块,然后 再执行父类A的非静态块和构造器,然后是B类的非静态块和构造器,后执行子 类的非静态块和构造器

Java 单例模式有五种实现方式:

  1. 饿汉式:
    特点:线程安全,调用效率高,但是不能延时加载
  2. 懒汉式:
    特点:线程安全,调用效率不高,但是能延时加载
  3. Double CheckLock实现单例:
    Double CheckLock也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题, 不建议使用),是在懒汉式单例上发展而来。
  4. 静态内部类模式:
    特点:线程安全,调用效率高,可以延时加载
  5. 枚举类:
    特点:线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用

如何选择:
1.单例对象占用资源少,不需要延时加载时:枚举 好于 饿汉
2.单例对象占用资源多,需要延时加载时:静态内部类 好于 懒汉式

final修饰符主要有以下四种:

  1. 用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法 被改变。对于成员变量来讲,我们必须在声明时、构造方法或者初始化块中对它赋值。
  2. 用来修饰局部变量,表示在变量的生存期中它的值不能被改变。
  3. 修饰方法,表示该方法无法被重写。
  4. 修饰类,表示该类无法被继承。

什么时抽象类:
如果一个类中没有包含足够的信息来描绘一个具体的对象,这种类称为抽象类。

Java抽象类的特点:
必须被继承,才能被使用。
必须使用abstract修饰符来修饰。

抽象方法的特点:
抽象方法只包含一个方法名,而没有方法体,使用abstract修饰。

接口特性:
1.接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
2.接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
3.接口中的方法都是公有的。
4.编译时自动为接口里定义的方法添加public abstract修饰符 5.Java接口里的成员变量只能是public static final共同修饰的,并且必须赋初值,可以不写public static final,编译的时候会自动添加

接口的继承:接口允许多继承

写个接口,实现并调用:

Java的集合是用来存储什么的:
储存数量不等的对象,并可以实现常用的数据结构,如栈、队列等。
Java的集合类主要由两个接口:
Collection 和 Map。

List集合:
List是有序且允许元素重复,允许元素为null。

Comparable排序接口:
Comparable 排序接口 是在类的内部实现。

Comparator比较接口:
该类不支持排序,所以要建立一个“该类的比较器”来进行排 序。

Comparable和Comparator区别比较:
Comparable是排序接口,若一个类实现了Comparable接口,就意味着“该类支持 排序”。
Comparator是比较器,我们若需要控制某个类的次序,可以建立一个“该类的 比较器”来进行排序。

Set集合:
不允许包含相同的元素,否作会失败。

HashSet类:不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化,集合元素可以null,但只能一个。

LinkedHashSet类:保证元素的排列顺序,顺序怎么写,添加顺序就怎么出来,可以放入null,但只能放入一个null。

TreeSet类:TreeSet类不能放null,不然会报错,添加顺序不管怎么写,结果都是按顺序排列出来。
由于TreeSet是有序的,也支持Comparable和Comparator两种排序方式。

Map集合的特点:
Map接口中键和值一一映射. 可以通过键来获取值。

TreeMap类:与 TreeSet类似的是,TreeMap中也提供了一系列根据key顺序访问key¬value对的方法

由于TreeMap是有序的,也支持Comparable和Comparator两种排序方式。TreeMap 主要是Key值排序

List、Map、Set三个接口存取元素时,各有什么特点?
答:List以特定索引来存取元素,有序,可以有重复元素。Set无序,不能存放重复元素(用对象的equals()方法来区分元素是否复)。Map保存键值对(key-value pair)映射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值