Java 的 基础
1. == 与 equals区别:
== :
基本类型和引用类型 == 的作用效果是不同
基本类型:比较值是否相同
引用类型:比较引用类是否相同
equals :
本质是 == ,只不过String 和 integer 等方法重写了equals 方法,把它变为值比较。(String重写了object的equals方法,把引用比较改成了值比较)
2. http 与 302 的区别:
301,302 都是HTTP状态的编码,都代表着某个URL 发生了转移,不同之处在于:
301 redirect: 301 代表永久性转移(Permanently Moved)。
302 redirect: 302 代表暂时性转移(Temporarily Moved )。
二.现实中的差异
对于用户
301,302对用户来说没有区别,他们看到效果只是一个跳转,浏览器中旧的URL变成了新的URL。页面跳到了这个新的url指向的地方。
2.2.对于引擎及站长
302转向可能会有URL规范化及网址劫持的问题。可能被搜索引擎判为可疑转向,甚至认为是作弊。
JavaLeader 的博客
URL
在WWW 上,
每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。
3 . https 443
443 端口即网页浏览端口,主要是用于HTTPS服务,80 端口是浏览网页的默认端口。
说明
网页浏览端口,能提供加密和通过安全端口传输的另一种HTTP。
HTTPS和HTTP的区别:
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全
silencement 的博客
4.80端口
80 点击了解
HTTP
(HyperText Transport Protocol)
即超文本传输协议开放的,此为上网冲浪使用次数最多的协议,主要用于WWW(World Wide Web)即万维网传输信息的协议。
5. 404
6. 502(服务器错误代码)
此服务器收到无效响应从上游服务器访问履行它的要求。
7. 面向对象特征(注重过程,代码可复用):
抽象 :
将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注属性和行为。不关注行为的细节。
- 封装
通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口.
面向对象的本质就是将现实世界描绘成一系列完全自治,封闭的对象,可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
封装给对象提供了隐藏内部特性和行为的能力,对象提供一些能这被其它对象访问的方法来改变它内部的数据。
提供构造方法(有了构造方法才能通过new去构建一个对象
1.构造方法必须和类名称一样
2.构造方法不能有返回值)
静态块(做的类的初始化的工作,执行在new之前)
控制访问
- 继承(extends)
目的:对父类方法的复用
继承是从已有类得到继承信息创建新类的过程,
继承让变化中的软件系统有了一定的延续性,
同时继承也是封装程序中可变因素的重要手段.
子类继承父类属性(静态特征)和方法(动态特征),
继承必须遵循封装当中的控制访问
- 多态
- 向上转型
允许相同或不同的子类类型的对象对同一信息做出不同响应。- 重载:
同一动作作用在同一对象上拥有不同的解释 overload- 重写:
同一动作作用在不同一对象上拥有不同的解释 override
狭义的多态值重写
声明一个父类型的引用指向具体子类型的实例
运行时才能绑定
8. 接口与抽象类的区别:
实现:
抽象类子类使用 extends 来继承
接口必须使用 implements 来实现
构造函数:
抽象类 可以有
接口 不可(接口不可实例化)
抽象类不能创建对象,但有构造方法,作用是让子类初始化时,对抽象类的数据进行初始化
原因:
子类初始化前,必须先将父类初始化,因为子类初始化可能要用到父类的数据
接口中的方法都是抽象的,没有方法实体,成员变量也是常量
方法在方法区中,常量在常量池
而对象在堆内存中扫描二维码关注公众号,回复: 13277683 查看本文章
Main 方法:
抽象类 可以有并能运行
接口 不可
实现数量:
类可以实现很多个接口,但只能继承一个抽象类
访问修饰符:
接口 方法中默认 使用 public 修饰
抽象 任意访问修饰符
9. 修饰符
i. Static
o 静态
能够修饰属性、方法、初始化代码快、内部类,不能修饰局部变量和类
- 本类所有对象共享
- 可以直接通过 类名.静态属性 访问
- 用类名直接调用静态属性,这样能把静态变量和实例变量加以区分,从而提高代码的可读性。
o static 修饰方法—静态方法
1)全类公有的方法
2) 可以使用类名.方法名直接调用
3) 静态方法与对象无关,不依赖对象所以无法使用this或super关键字
4) 静态方法只能访问静态成员(非静态方法中,无论方法和属性是否是静态的都能够访问)
5)静态方法/属性可以被继承
6)静态方法只能被静态方法覆盖且没有多态
使用多态时:子类对象给父类引用赋值 ,运行时会调用子类覆盖的方法,但是当对一个引用调用静态方法时,等同于对这个引用类型调用静态方法。
o 类加载
1)当JVM第一次使用某个类时(new 对象、调用静态成员、使用子类)需要通过ClassPath查找该类的.class文件
2)将.class文件中保存的该类信息(属性、方法….)加载到内存中(内存中的模板)
3)加载时会初始化该类的必要信息,初始化静态属性、静态方法、执行该类静态初始化代码块等。
4)静态方法只能访问静态成员(非静态方法中,无论方法和属性是否是静态的都能够访问)
5)静态方法/属性可以被继承
6)静态方法只能被静态方法覆盖且没有多态
一次运行中类加载只执行一次
只声明引用,不会进行类加载
o 类加载的过程:
1)如果有需要先加载父类(初始化父类静态属性、执行父类静态初始化代码块)
2)初始化本类静态属性,执行本类静态初始化代码块
ii. Final
final属性能够修饰变量、方法 和类。变量 包括属性、局部变量
用final修饰的变量和属性一般称之为常量。
定义:一旦赋值,其值不能改变的变量(final修饰的属性必须得有值)
final修饰的方法不允许被覆盖。
final修饰方法意义在于:防止子类在定义新方法时,造成不经意的重写。
final不能继承
1)常用 public static final (公开静态常量) 用于保存一些常用且不可变的值。
2)final 修饰基本类型变量- -值不可变
3)final 修饰对象引用- - 地址不可变
4)final static 可以连用,private、static、final 均不能与abstract连用。、
5)JDK中一些基础类库被定义为final,例如:String、Math、Integer、Double等
6)static final修饰的成员变量称为常量,必须声明同时初始化,不可被改变。
static final 常量会在编译期被替换。
iii. abstract
修饰类,方法
抽象类
abstract修饰类,则这个类就成为了一个抽象类,抽象类的特点是:
抽象类只能用来声明引用,不能用来创建对象。
虽然抽象类不能创建对象,但是抽象类可以被继承,从而创建子类对象。
1)抽象类可以没有抽象方法,有抽象方法的类一定是抽象类
2)子类覆盖父类的抽象方法时,并不是用一个特殊的实现替换一个一般的实现,而是在父类没有方法实现的情况下,子类给出一个方法的实现。
3)子类继承抽象类,要么也成为抽象类,要么就必须实现抽象类中所有的抽象方法。
抽象的作用
方法的声明是共性,方法的实现是特性。
10. Final
I. 修饰数据
II. 同时使用static和final修饰的成员在内存中只占据一段不能改变的存储空间
III. 修饰方法参数
IV. 修饰方法
V. 修饰类
final只保证这个引用类型变量所引用的地址不会发生改变,即一直引用这个对象,但这个对象属性是可以改变的
这瓜保熟么 的博客
- 用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值;
- 用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
- 修饰方法,表示该方法无法被重写;
- 修饰类,表示该类无法被继承。
11. Arrary 和 ArrayList 的区别
Array 的容量是固定的,ArrayList 的容量是根据需求自动扩展
ArrayList 提供了 添加、插入或移除 某一范围元素的方法
而 Array 中,只能一次获取或设置一个元素值
12. 重载(Overload)和重写(Override)的区别。
- 重载的方法能否根据返回类型进行区分?
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;
重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,(有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。)
重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
13. String :不可变字符序列
StringBuffer: 可变字符序列,效率低,线程安全
stringbuilder(JDK1.5):可变字符序列,效率高,线程不安全
14. 构造方法
- 构造方法名称必须与类相同
- 构造方法是没有返回类型的,即使是void也不能有
- 构造方法不能被继承,不能被直接调用
- 类定义时提供了默认的无参构造方法
- 构造方法可以私有
- 作者:麦克猫Cat
- 本文版权归作者和CSDN共有,欢迎交流