* double 占八个字节-1.798E308~1.798E308
- 字符型
* char 占两个字节 0~65535
- 布尔型
* boolean
* boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小
4.常用排序
(1)冒泡排序:相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
public void bubbleSort(int array[]) {
int t = 0;
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
t = array[j];
array[j] = array[j + 1];
array[j + 1] = t;
}
}
}
}
(2)选择排序:从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
public void selectSort(int array[]) {
int t = 0;
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] > array[j]) {
t = array[i];
array[i] = array[j];
array[j] = t;
}
}
}
}
5.成员变量和局部变量的区别
-
A:在类中的位置不同
-
成员变量:在类中方法外
-
局部变量:在方法定义中或者方法声明上
-
B:在内存中的位置不同
-
成员变量:在堆内存(成员变量属于对象,对象进堆内存)
-
局部变量:在栈内存(局部变量属于方法,方法进栈内存)
-
C:生命周期不同
-
成员变量:随着对象的创建而存在,随着对象的消失而消失
-
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
-
D:初始化值不同
-
成员变量:有默认初始化值
-
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
-
注意事项:
-
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
-
基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
-
引用数据类型变量包括哪些:数组,类,接口,枚举
6.static关键字的注意事项
-
a:在静态方法中是没有this关键字的
-
如何理解呢?
-
静态是随着类的加载而加载,this是随着对象的创建而存在。
-
静态比对象先存在。
-
b:静态方法只能访问静态的成员变量和静态的成员方法
-
静态方法:
-
成员变量:只能访问静态变量
-
成员方法:只能访问静态成员方法
-
非静态方法:
-
成员变量:可以是静态的,也可以是非静态的
-
成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
-
简单记:
-
静态只能访问静态。
7.静态变量和成员变量的区别
-
静态变量也叫类变量 成员变量也叫对象变量
-
A:所属不同
-
静态变量属于类,所以也称为为类变量
-
成员变量属于对象,所以也称为实例变量(对象变量)
-
B:内存中位置不同
-
静态变量存储于方法区的静态区
-
成员变量存储于堆内存
-
C:内存出现时间不同
-
静态变量随着类的加载而加载,随着类的消失而消失
-
成员变量随着对象的创建而存在,随着对象的消失而消失
-
D:调用不同
-
静态变量可以通过类名调用,也可以通过对象调用
-
成员变量只能通过对 象名调用
如果一个类中所有的方法都是静态的,需要私有构造方法 private ArrayTools() {}
8.继承
(1) 继承(extends)
* 让类与类之间产生关系,子父类关系
(2)继承的好处
* a:提高了代码的复用性
* b:提高了代码的维护性
* c:让类与类之间产生了关系,是多态的前提
(3)继承的弊端
* 类的耦合性增强了。
-
开发的原则:高内聚,低耦合。
-
耦合:类与类的关系
-
内聚:就是自己完成某件事情的能力
9.this和super的区别和应用
-
A:this和super都代表什么
-
this:代表当前对象的引用,谁来调用我,我就代表谁
-
super:代表当前对象父类的引用
-
B:this和super的使用区别
-
a:调用成员变量
-
this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
-
super.成员变量 调用父类的成员变量
-
b:调用构造方法
-
this(…) 调用本类的构造方法
-
super(…) 调用父类的构造方法
-
c:调用成员方法
-
this.成员方法 调用本类的成员方法,也可以调用父类的方法
-
super.成员方法 调用父类的成员方法
10.多态的概述
-
A:多态(polymorphic)概述
-
事物存在的多种形态
-
B:多态前提
-
a:要有继承关系。
-
b:要有方法重写。
-
c:要有父类引用指向子类对象。
-
C:abstract不能和哪些关键字共存?
static final private
11.多态中的成员访问特点
-
成员变量
-
编译看左边(父类),运行看左边(父类)。
-
成员方法
-
编译看左边(父类),运行看右边(子类)。
-
静态方法
-
编译看左边(父类),运行看左边(父类)。
-
(静态和类相关,算不上重写,所以,访问还是左边的)
-
只有非静态的成员方法,编译看左边,运行看右边
12.接口的概述及其特点
-
A:接口概述
-
从狭义的角度讲就是指java中的interface
-
从广义的角度讲对外提供规则的都是接口
-
B:接口特点
-
a:接口用关键字interface表示
-
interface 接口名 {}
-
b:类实现接口用implements表示
-
class 类名 implements 接口名 {}
-
c:接口不能实例化
-
那么,接口如何实例化呢?
-
按照多态的方式来实例化。
-
d:接口的子类
-
a:可以是抽象类。但是意义不大。
-
b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
-
e:接口中所有的方法都是抽象的
13.抽象类和接口的区别
-
A:成员区别
-
抽象类:
-
成员变量:可以变量,也可以常量
-
构造方法:有
-
成员方法:可以抽象,也可以非抽象
-
接口:
-
成员变量:只可以常量(默认public static final修饰)
-
构造方法:无
-
成员方法:只可以抽象(默认public abstract修饰)
-
B:关系区别
-
类与类
-
继承,单继承
-
类与接口
-
实现,单实现,多实现
-
接口与接口
-
继承,单继承,多继承
-
C:设计理念区别
-
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
-
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
14.四种权限修饰符的测试
权限\类 | 本类 | 同一个包下(子类和无关类) | 不同包下(子类) | 不同包下(无关类)
private Y
默认 Y Y
protected Y Y Y
public Y Y Y Y
15.类及其组成所使用的常见修饰符
-
A:修饰符:
-
权限修饰符:private,默认的,protected,public
-
状态修饰符:static,final
-
抽象修饰符:abstract
-
B:类:
-
权限修饰符:默认修饰符,public
-
状态修饰符:final
-
抽象修饰符:abstract
-
用的最多的就是:public
-
C:成员变量:
-
权限修饰符:private,默认的,protected,public
-
状态修饰符:static,final
-
用的最多的就是:private
-
D:构造方法:
-
权限修饰符:private,默认的,protected,public
-
用的最多的就是:public
-
E:成员方法:
-
权限修饰符:private,默认的,protected,public
-
状态修饰符:static,final
-
抽象修饰符:abstract
-
用的最多的就是:public
-
F:除此以外的组合规则:
-
成员变量:public static final
-
成员方法:
-
public static
-
public abstract
-
public final
16.Eclipse中快捷键的使用
-
A:新建 ctrl + n
-
B:格式化 ctrl+shift+f
-
C:导入包 ctrl+shift+o
-
D:注释 ctrl+/,ctrl+shift+/,ctrl+shift+\
-
E:代码上下移动 选中代码alt+上/下箭头
-
F:查看源码 选中类名(F3或者Ctrl+鼠标点击)
-
G:查找具体的类 ctrl + shift + t
-
H:查找具体类的具体方法 ctrl + o
-
I:给建议 ctrl+1,根据右边生成左边的数据类型,生成方法
-
J:删除代码行 ctrl + d
-
K:抽取方法alt + shift + m
-
L:改名alt + shift + r
-
M:查找 ctrl + f
-
N:向上/向下复制一行:ctrl + alt + 上/下箭头
-
O:抽取局部变量:alt + shift + L
17.==号和equals方法的区别
相同点:都是作比较的,返回的都是布尔类型。
不同点:
(1)==:
- ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,
基本数据类型比较的是值, 引用数据类型比较的是地址值
(2)equals:
- equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,
如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,
重写后的equals方法比较的是对象中的属性
18.集合部分总结
- Collection
* List(存取有序,有索引,可以重复)
* ArrayList
底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
* LinkedList
底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
* Vector
底层是数组实现的,线程安全的,无论增删改查都慢
如果查找和修改多,用ArrayList
如果增和删多,用LinkedList
如果都多,用ArrayList
* Set(存取无序,无索引,不可以重复)
* HashSet
底层是哈希算法实现
LinkedHashSet
底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
* TreeSet
底层是二叉树算法实现
一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别
- Map
* HashMap
底层是哈希算法,针对键
* LinkedHashMap
底层是链表,针对键
* TreeMap
底层是二叉树算法,针对键
开发中用HashMap比较多
19.内存输出流
-
1.什么是内存输出流
-
该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
-
2.使用方式
-
创建对象: new ByteArrayOutputStream()
-
写出数据: write(int), write(byte[])
-
获取数据: toByteArray()
FileInputStream fis = new FileInputStream(“a.txt”);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b;
while((b = fis.read()) != -1) {
baos.write(b);
}
//将内存缓冲区中所有的字节存储在newArr中
//byte[] newArr = baos.toByteArray();
//System.out.println(new String(newArr));
System.out.println(baos);
fis.close();
20.单例设计模式(掌握)
-
单例设计模式:保证类在内存中只有一个对象。
-
如何保证类在内存中只有一个对象呢?
-
(1)控制类的创建,不让其他类来创建本类的对象。private
-
(2)在本类中定义一个本类的对象。Singleton s;
-
(3)提供公共的访问方式。 public static Singleton getInstance(){return s}
饿汉式和懒汉式的区别:
饿汉式:类一加载就生成对象。安全,效率高。相对懒汉式会在未使用之前就占用内存。
懒汉式:存在线程安全漏洞,可能会创建多个对象,可以利用同步解决,但是效率会变低。
-
单例写法两种:
-
(1)饿汉式 开发用这种方式。
//饿汉式
class Singleton {
//1,私有构造函数
private Singleton(){}
//2,创建本类对象
private static Singleton s = new Singleton();
//3,对外提供公共的访问方法
public static Singleton getInstance() {
return s;
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
te Singleton(){}
//2,创建本类对象
private static Singleton s = new Singleton();
//3,对外提供公共的访问方法
public static Singleton getInstance() {
return s;
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-xxv8TZSE-1715743735781)]
[外链图片转存中…(img-vOkn5Xks-1715743735782)]
[外链图片转存中…(img-piKfd4ij-1715743735782)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!