Java基础知识盘点(一)- 基础篇
基本功
面向对象特征
封装、继承、多态和抽象
1、封装:给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法,来改变它内部的数据。
在Java中,其访问权限有3种修饰符:public、private、protected。每一个修饰符给其他的位于同一包或者不同包对象都赋予了不同的访问权限。
好处:
1、通过隐藏对象的属性,来保护对象内部的状态。
2、提高了代码的可用性和可维护性,因为对象的行为可以被单独改变或者扩展。
3、禁止对象之间的不良交互,提高模块化。
2、继承:给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用性,也可以在不修改类的情况下,给现存的类添加新特性。
3、多态:是编程语言给不同的数据类型做相同的接口展示的一种能力。一个多态类型的操作可以用在其他类型的值上面。
4、抽象:是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java支持创建只暴露接口而不包含方式实现的抽象类。
final,finally,finalize的区别
1、final,一种修饰符,如果类的定义中增加这个修饰符那么就意味着该类不能派生出新的子类,不能作为父类被继承,给变量或者方法声明为final,意味着他们不能被修改。
2、finally,异常语句的控制执行动作,当语句出现异常的时候,就会跳入到catch语句中,然后控制执行会进入到finally代码块中。
3、finalize,方法名,清理系统资源,在垃圾收集器将对象清理之前做必要的清理工作。
int和Integer 有什么区别
int是基础数据类型;integer是其包装类。
为什么要提供包装类?
是为了在各种类型间转化,这里会涉及到装箱和拆箱的动作。Java中包装类比较多的用途就是用于数据类型的转化中。
String和StringBuilder、StringBuffer的区别
String是只读字符串,不能被继承,也就意味着String引用的字符串内容不能被修改,StringBuilder、StringBuffer的字符串对象可以直接被修改,StringBuilder在单线程下使用,因此StringBuilder的效率比StringBuffer要高
&和&&的区别
&运算符有两种用法:按位与、逻辑与
&&运算符是短路与运算,它与&的区别在于,只要左侧结果为False,那么右侧就不会再执行
hashCode和equals的关系
对象比较.equals相同,那么hashCode一定是相同的,但hashCode相同,其equals不一定相同
内存中的栈(stack)、堆(heap)和静态区(static area)的用法
通常定义的一个基础数据类型的变量、一个对象的引用、已经函数调用的现场保存,都是用栈空间;
通过new关键字和构造函数创建的对象放在堆空间;
我们定义字面量,如“hello”等常量,我们是放在静态区。
比较:
1、栈空间的读取速度是最快的,但是栈很小
2、通常大量的对象都是放在堆空间
JVM加载class文件的原理机制
是用类加载器(ClassLoader)和其子类实现的
重写和重载的区别
1、重写(override)
1、方法名、参数、返回值类型相同
2、子类方法不能缩小父类方法的访问权限
3、子类方法不能抛出比父类方法更多的异常
4、存在于父类与子类之间
5、方法如果被定义为final不能被重写
2、重载(overload)
1、参数类型、个数、顺序至少有一个不相同
2、不能重载之后返回值的方法名
3、存在于父类和子类、同类中。
抽象类和接口的区别
接口是公开的,供别人访问的,里面不能有私有方法或变量。抽象类是可以与私有方法或者变量的。实现接口的,就一定要实现接口的所有方法,而抽象类可以选择的重写需要的方法。
反射的用途及实现
什么是反射:
反射就是动态获取运行时类的所有属性和方法,也可以动态获取运行时对象的所有属性和方法
反射主要用于提供以下功能:
1、在运行时构造一个类的对象
2、判断一个类所具有的成员变量和方法
3、调用一个对象的方法
4、生态动态管理:反射最大的应用就是框架
Java反射的主要功能:
1、确定一个对象的类
2、取出一个类的数据成员、方法、构造器和超类
3、找出一个接口定义的常量和方法说明
4、创建一个类实例,这个实例在运行时才有名字(运行时才生成对象)
5、取得设定对象数据成员的值
6、在运行时调用动态对象的方法
7、创建数据,数组大小和类型在运行时才能确定,也能更改数据成员的值
反射还有一个重要问题就是性能问题,当系统大量应用反射的时候,系统性能会大打折扣
自定义注解的场景及实现
Java自定义注解是通过运行时靠反射获取注解的,通过aop给方法添加切面,通过反射获取方法包含的注解。
GET与POST方式的区别
GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。
session 与 cookie 区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
JDBC 流程
1、加载JDBC驱动:通过java.lang.Class类的静态方法:forName实现
2、提供JDBC连接的URL:该链接的书写形式:协议:子协议:数据源标识
3、创建数据库连接:通过java.sql.DriverManager获得Connection对象(代表一个数据库连接)
4、创建一个Statement:要执行SQL就必须要获得java.sql.Statement实例,该实例包括3种类型:Statement(静态语句)、PreparedStatement(动态语句)、CallableStatement(数据库存储过程)
5、执行SQL语句:Statement接口包含了三种执行SQL语句的方法:executeQuery 、executeUpdate 和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或 DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的 语句。 具体实现的代码:
ResultSet rs = stmt.executeQuery(“SELECT * FROM …”) ; int rows = stmt.executeUpdate(“INSERT INTO …”) ; boolean flag = stmt.execute(String sql) ;
6、处理结果
返回两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的一个ResultSet结果集对象。
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些 行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:
while(rs.next()){
String name = rs.getString(“name”) ;
String pass = rs.getString(1) ; // 此方法比较高效
}
(列是从左到右编号的,并且从列1开始)
7、关闭JDBC对象
关闭顺序和声 明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
MVC设计模式
M:模型:封装业务逻辑和数据的一个一个模块
V:视图:所有我们看到的内容
C:控制器:调用这些模块,当用户发起一个请求的时候,控制器会根据请求来选择要处理的业务逻辑模块和要选择的数据,再返回去把结果输出给视图来展示
equals 与 ==的区别
基本数据类型(type、int、char、long、boolean、short、float、double)都是用 == 来比较他们的值。
复合类型(类)当用 == 比较的时候,比较的是他们内存中存放的地址,所以除非是同一个new出来的对象,他们比较后的结果为true。否则比较后的结果就为false。
equals初始行为是比较对象的内存地址,但一些类当中把这些方法重写了,如:String、 Integer 、Date
Java基础知识盘点(一)- 基础篇的更多相关文章
- PHP丨PHP基础知识之PHP基础入门——函数「理论篇」
前两天讲过PHP基础知识的判断条件和流程控制,今天来讲讲PHP基础知识之PHP基础入门--函数! 一.函数的声明与使用 1.函数名是标识符之一,只能有数字字母下划线,开头不能是数字. 函数名的命名,须 ...
- Java基础知识回顾之七 ----- 总结篇
前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...
- C# 基础知识系列- 14 IO篇 文件的操作 (3)
本篇继续前两篇内容,跟大家介绍一下Path类以及FileSystemInfo这个类的主要方法和属性. 上文提到,在<C# 基础知识系列-IO篇>之文件相关的内容完结之后,会带领大家开发一个 ...
- C# 基础知识系列- 14 IO篇 流的使用
0. 前言 继续之前的C# IO流,在前几篇小短片中我们大概看了下C# 的基础IO也对文件.目录和路径的操作有了一定的了解.这一篇开始,给大家演示一下流的各种操作.以文件流为例,一起来看看如何操作吧. ...
- Java基础知识盘点(三)- 线程篇
创建线程的方式及实现 一.继承Thread类创建线程类 1.定义Thread的子类,并重写run方法,因为该方法的方法体就是代表了线程要完成的任务,因此run方法又叫做执行体. 2.创建Thread子 ...
- Java基础知识盘点(二)- 集合篇
List和Set区别 List和Set都是继承Collection接口 List特点:元素有放入顺序,元素可重复 Set特点:元素无放入顺序,元素不可重复 Set和List对比: Set:检索元素效率 ...
- java基础知识总结8(数据库篇1)
一. Oracle的安装(windowXP.win7.Linux)和卸载 1.1 Oracle的安装 1.1.1 在WindowsXP.Win7下安装 第一:解压win32_11gR2_databas ...
- java基础知识汇总6(html篇)
五.html // 定义文档类型. < html> 定义 HTML 文档. < body> 定义文档的主体. < h1> to < h6> 定义 HTM ...
- C# 基础知识系列- 17 实战篇 编写一个小工具(1)
0. 前言 这是对C# 基础系列的一个总结,现在我们利用之前学到的知识做一个小小的工具来给我们使用. 如果有看过IO篇的小伙伴,应该有印象.当时我提过一个场景描述,我们在平时使用系统的时候,经常会为了 ...
随机推荐
- PrintWriter write返回数据显示中文变问号"???"
在response.getWriter();前加上这些就ok了 response.setContentType("text/html;charset=UTF-8"); respon ...
- dedecms二次开发
安装遇到的问题 修改文件如下 1.date目录下的config.cache.bak.php改成config.cache.php 2install目录下的index.html.install_lock. ...
- FB面经Prepare: Email User
有一些账号,账号里面有一个或多个email, 如果两个账号有共同的email,则认为这两个账号是同一个人,找出哪些账号是同一个人 输入是这样的:数字是用户,字母是邮箱,有很多人有多个邮箱,找出相同的用 ...
- 《linux就该这么学》第十二节课:第10章,Apache网站服务
第十章 10.1.网站服务程序 (让用户能够通过网站访问服务器上的资源) 目前提供的网站服务有IIS,Nginx,Apache等,IIS是windows中默认的web服务程序. Nginx是后起之秀, ...
- Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [web_dao,web_service] are excluded from annotation processing
早上学习maven环境搭建时遇到的这个问题 下面这个错误的大概意思是:模块之间的互相依赖 Error:java: Annotation processing is not supported for ...
- 【电子书分享】Learning PySpark下载,包含pdf、epub格式
<Learning PySpark>电子书下载链接: 链接:http://pan.baidu.com/s/1skAC6LZ 密码:kbse,包括pdf.epub格式: (--学习愉快--)
- sqlserver 导入excel
安装完office2013和sqlserver2017时,不知道是盗版问题还是啥 原因, 在sqlserver导入excel时,报错. 在把Excel导入SQL server时出现“未在本地计算机上注 ...
- 解决CentOS(6和7版本),/etc/sysconfig/下没有iptables的问题
一.Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service ip ...
- Angular4 响应式编程
- Angular4中使用后台去数据,Swiper不能滑动的解决方法(一)
Swiper是目前较为流行的移动端触摸滑动插件,因为其简单好用易上手,很受很多设计师的欢迎. 今天在使用Swiper的时候遇到这个问题: 使用angularjs动态循环生成swiper-slide ...