JavaSE基础篇(上)

1、java的语言特点

java语言具有简单性、高性能、编译性、解释性、面向对象、分布式处理、健壮性、安全性、开源和跨平台等特点;跨平台性指通过java语言编写的程序在不同的系统平台上都可以运行,只需要在运行java应用程序的操作系统上,先安装一个java虚拟机即可。

2、JDK、JRE、JVM的关系

1、JDK–Java Development Kit是针对java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。
2、JRE–Java Runtime Environment是运行JAVA的运行时环境,包含JVM和Java核心类库。
3、JVM–Java Virtual Machine,java虚拟机的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语写作的软件程序。

3、数据类型

在这里插入图片描述

4、运算符

在这里插入图片描述

5、break和continue的区别

break是用于中断当前循环、简单粗暴;continue是跳出本次循环,进入下一轮。

6、数组工具类Arrays

1、Arrays.toString(数组)
把数组里的数据,用逗号连接成一个字符串。
格式:[10,15,56,14]
2、Arrays.sort(数组)
把数组排序,对于基本类型的数组使用优化后的快速排序算法,效率高,对引用类型数组,使用优化后的合并排序算法。
3、Arrays.copyOf(数组,新的长度)
把数组复制成一个指定长度的新数组。
新数组长度大于原数组,相当于复制,并增加位置。–数组的扩容
新数组长度小于原数组,相当于截取前一部分数据。–数组的缩容

7、算法

1、选择排序
先将第一个位值上的数跟之后所有位置上的数依次进行比较,如果第一个位置上的数比第二个位置上的数大,则进行互换,然后继续将第一个位置上的数与第三个位置上的数进行比较,经过一轮的比较后,第一个位值上的数就是所有数中最小的一个,如此往复。
2、插入排序
给定的一组记录,将其分为两个序列组,一个为有序序列(按照顺序从小到大或者从大到小),一个为无序序列,初始时,将记录中的第一个数当成有序序列, 剩下其他所有数都当做是无序序列组中的数据。然后将无序序列组中的数据插入到有序序列的适当位置。
3、冒泡排序
对于给定的n个记录,从第一个记录开始依次对相邻的两个记录进行比较,当前面的记录大于后面的记录时,交换位置,进行一轮比较后,第n位上就是整个记录中最大的数,然后在对前n-1个记录进行第二轮比较,重复该过程直到进行比较的记录只剩下一个为止。
4、快速排序
将待排序记录分为独立的两个部分,左侧记录都是小于或等于轴值,右侧记录都是大于或等于轴值,然后分别对左侧部分和右侧部分重复前面的过程,也就是左侧部分又选择一个轴值,又分为两个独立的部分,如此继续(简单的说就是以一个数为基准,从右边找一个比他小的数互换位置,再以这个数为基准,从左边找一个比他大的数互换,循环往复就可以确定这个数的最终位置;然后以这个数为中心,对两边的数分别进行同样的操作,就可以确定出每个数的最终位置)。
5、希尔排序
是插入排序的操作,但是希尔排序并不是把一组记录看成一个整体,而将整个记录分为了若干组记录,然后在对每组记录进行插入排序。
6、堆排序
堆是一颗完全二叉树。先将一组拥有n个元素的序列构建成大顶堆或者小顶堆,在将根结点上的数跟堆最后一位数进行互换。
7、归并排序
将一个数组中每个元素都看成一个有序序列(数组长度为n),然后将相邻两个有序序列合并成一个有序序列

8、面向对象

1、概念(OOP,Object Oriented Programming)
所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的执行者变成了指挥者,面向对象是基于面向过程而言的。
● 面向过程强调的是过程;
● 面向对象强调结果。
2、三大特征
①、封装性,把相关的数据封装城一个“类组件”,可以提高安全性和重用性;
②、继承性,是子类自动共享父类属性和方法,这是类之间的一种关系;
③、多态,增强软件的灵活性和重用性。

9、类和对象

1、类
①、java语言最基本的单位就是类,类似于类型;
②、类是一类事务的抽象;
③、可以理解为模板或者设计图纸。
2、对象
每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
①、对象的状态用来描述对象的基本特征
②、对象的行为用来描述对象的功能;
③、对象的标识是指对象再内存中都有一个唯一的地址用来和其他对象区分开来;
④、类是一类事物的抽象,对象是具体的实现。
3、类和对象的关系
①、计算机语言是用来描述现实世界事务的;属性+行为
②、通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法。
4、对象再内存中的存储
Java把内存分成5大区域,重点关注栈和堆。
①、一般来讲局部变量存在栈中,方法执行完毕内存就被释放;
②、对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放;
③、每个堆内存的元素都有地址值;
④、对象中的属性都是有默认值的。
5、super关键字
①、通过super关键字可以使用父类的内容;
②、super代表父类的一个引用对象;
③、如果用,必须出现在调用位置的第一行。

10、静态代码块、构造代码块、局部代码块

1、静态代码块:在类加载时就加载,并且只被加载一次,一般用于项目的初始化;
2、构造代码块:在调用构造方法前会自动调用,每次创建对象都会被调用;
3、方法里的代码块,方法被调用时才会执行
4、静态代码快:static{};位置:在类里方法外;
5、静态>构造代码块>构造方法>局部

11、实现和继承

1、类和类的关系:继承extends/单继承/单根继承
–继承的意义:为了提高代码的复用性,减少了代码的编写提高开发效率。
–方法重写的意义:在不修改父类源码的前提下,在子类中重写业务,从此使用的就是重写后的功能。
–要求子类的方法声明和父类一样,只要改方法体。
–有了继承有了重写就产生了多态,多态的意义:为了统一程序的调用标准,标准就是父类。
–多态:也就是向上转型、向上造型
–向下造型的意义:很少用,相当于想要使用子类的特殊功能,还不如直接创建子类对象简单。
2、类和接口的关系:实现implements 单实现/多实现
– class A implements B,C;
– 其中,A是实现类,B和C是接口;
– 要求A 可以把 B 和C 接口里的所有 抽象方法 都重写掉,否则 A 就是抽象类;
– 接口不能创建对象;
– 接口里没有构造方法,接口里都是常量,接口里都是抽象方法。
3、接口和接口关系:继承extends / 单继承 / 多继承
– 接口的多继承的关系,打破了java单继承的局限性
– interface A extends B,C
– 其中,A B C 都是接口,A是子接口,同时拥有B和C接口里的所有功能
– class AImpl implements A
– 要求AImpl需要重写A接口里的所有方法(是包含B和C接口的所有方法),否则就是抽象类
4、接口和抽象类的区别!!!
– 相同点:都是抽象层,都不能实例化
– 不同点:
– 1、抽象类用abstract关键字描述,接口用interface
– 2、子类和抽象类之间是extends关系,实现类和接口之间是implements关系
– 3、抽象类中 可以 有构造方法 ,接口里 不能 出现 构造方法
– 4、抽象类里可以有 变量,接口里没有变量全都是静态的常量
– 5、接口里定义常量的语法:public static final String NAME=“jack”,会为变量自动拼接public static final
– 6、抽象类里 可以有普通方法 也可以有 抽象方法,接口都是抽象方法
– 7、抽象类和子类之间是继承关系,而且java中,只支持单继承
– 8、接口突破了java单继承的局限性,因为接口可以多继承也可以多实现,甚至可以继承的同时多实现
– 9、接口的复杂用法
– 多继承: interface A extends B,C 其中A是子接口,同时拥有自己的和BC的功能
– 多实现: class AImpl implements M,N,O,P 其中AImpl是实现类,需要同时重写MNOP的所有抽象方法,否则就是一个抽象类
– 继承的同时多实现: class AImpl extends Object implements M,N 一定是先继承后实现

12、设计模式

java中总共有23中设计模式:
在这里插入图片描述
单例模式:某个类只能有一个实例,提供一个全局的访问点。

简单工厂:一个工厂类根据传入的参量决定创建出那一种产品类的实例。

工厂方法:定义一个创建对象的接口,让子类决定实例化那个类。

抽象工厂:创建相关或依赖对象的家族,而无需明确指定具体类。

建造者模式:封装一个复杂对象的构建过程,并可以按步骤构造。

原型模式:通过复制现有的实例来创建新的实例。

适配器模式:将一个类的方法接口转换成客户希望的另外一个接口。

组合模式:将对象组合成树形结构以表示“”部分-整体“”的层次结构。

装饰模式:动态的给对象添加新的功能。

代理模式:为其他对象提供一个代理以便控制这个对象的访问。

亨元(蝇量)模式:通过共享技术来有效的支持大量细粒度的对象。

外观模式:对外提供一个统一的方法,来访问子系统中的一群接口。

桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变化。

模板模式:定义一个算法结构,而将一些步骤延迟到子类实现。

解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器。

策略模式:定义一系列算法,把他们封装起来,并且使它们可以相互替换。

状态模式:允许一个对象在其对象内部状态改变时改变它的行为。

观察者模式:对象间的一对多的依赖关系。

备忘录模式:在不破坏封装的前提下,保持对象的内部状态。

中介者模式:用一个中介对象来封装一系列的对象交互。

命令模式:将命令请求封装为一个对象,使得可以用不同的请求来进行参数化。

访问者模式:在不改变数据结构的前提下,增加作用于一组对象元素的新功能。

责任链模式:将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。

迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。

13、饿汉式和懒汉式的区别

1、饿bai汉式是线程安全的,在类创建的同du时就已经创建好zhi一个静态的对象供系统使用dao,以后不在改变。懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。
2、从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题,写法简单明了,能用则用。真正用到的时候才去建这个单例对象,“饿汉式”是在不管用不用得上,一开始就建立这个单例对象。

14、开闭原则OCP

开放功能扩展,关闭源码修改。等

开闭原则的英文全称是Open Close Principle,缩写是OCP,它是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。

开闭原则的定义是:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改是封闭的。

开闭原则,是一种设计模式,随着面向对象程序设计的思想,应运而生。

开:指的是可以在源代码的基础上进行扩展,比如继承,接口,抽象类等。在JAVA中,之所以用继承,是在可以直接调用类库的前提下,对其功能进行扩展。不需要应用者去了解封装类的内部逻辑就可以做开发。

闭:指不允许对原有的代码进行修改。以免影响其他现有功能,造成功能瘫痪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值