Java新知识系列 四
- []URL的组成<协议>://<主机>:<端口>/<路径> .
- []线程的定义实例化和启动。
- []类的final变量初始化需要满足的条件.
- []管道通信,进程间的通信方式.
- []Java中的构造方法
- []Socket和ServerSocket的创建:http://www.cnblogs.com/rond/p/3565113.html
- []java中各个常用数据接口的继承关系:http://www.cnblogs.com/jing99/p/7057245.html
- []ArrayList和LinkList对比知识:http://yulon.iteye.com/blog/602556
- [] Java中异常的分类回答;https://blog.csdn.net/weixin_39382337/article/details/79438223
- [] PreparedStatement与Statement 的使用注意;https://blog.csdn.net/u011161786/article/details/48394751;http://www.cnblogs.com/raymond19840709/archive/2008/10/13/1309657.html
URL的组成<协议>://<主机>:<端口>/<路径> :URL(Uniform Resource Locator) ,统一资源定位符,能够对因特网的资源进行定位。URL一般有四部分组成: <协议>://<主机>:<端口>/<路径>现在最常用的<协议>为http协议。<主机>是指主机在因特网上的域名。主机号= ip地址+子网掩码.http协议的默认<端口>为80。<路径>是指要的文件的路径。线程的定义实例化和启动。一 、定义线程: 1、扩展java.lang.Thread类。 2、实现java.lang.Runnable接口。二、实例化线程: 1、如果是扩展java.lang.Thread类的线程,则直接new即可。2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:Thread(Runnable target)Thread(Runnable target, String name)Thread(ThreadGroup group, Runnable target)Thread(ThreadGroup group, Runnable target, String name)Thread(ThreadGroup group, Runnable target, String name, long stackSize)三、启动线程: 在线程的Thread对象上调用start()方法,而不是run()或者别的方法。Final成员变量初始化需要满足的条件:类的final成员变量必须满足以下其中一个条件1、在构造函数中赋值2、初始化赋值管道通信,进程间的通信方式.管道实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。它类似于通信中半双工信道的进程通信机制,一个管道可以实现双向 的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。管道的容 量大小通常为内存上的一页,它的大小并不是受磁盘容量大小的限制。当管道满时,进程在 写管道会被阻塞,而当管道空时,进程读管道会被阻塞,Java中的构造方法构造方法的特点:- 构造方法的方法名与类名相同
- 构造方法没有返回值类型,也不写void
- 构造方法可以重载
构造方法的分类:显示的构造方法和隐式地构造方法- 显示的构造方法:显示的写出构造方法时,系统不会提供默认的无参构造方法
- 隐式地构造方法:系统默认提供的无参构造方法
代码块的优先级: 静态成员变量或静态代码块>main方法>非静态成员变量或非静态代码块>构造方法代码块的分类:静态代码块和实例代码块- 静态代码块:static修饰的代码块,在类加载时执行,且只执行一次。因为类就加载一次了。
- 实例代码块:没有static修饰的代码块,创建对象时执行,每创建一次对象加载一次。
实例代码块在执行构造方法之前执行。所以优先级高于构造方法。Socket和ServerSocket的创建:http://www.cnblogs.com/rond/p/3565113.htmlServerSocket (int port)创建一个serversocket 绑定在特定的端口Socket(InetAddress address, int port)创建一个socket流,连接到特定的端口和ip地址java中各个常用数据接口的继承关系参考:http://www.cnblogs.com/jing99/p/7057245.html其中Iterable接口是Collevtion接口的父类;ArrayList和LinkList对比知识:http://yulon.iteye.com/blog/602556,,https://www.cnblogs.com/sierrajuan/p/3639353.html1:认识和理解ArrayList和LinkedListArrayList实现了List接口,它是以数组的方式来实现的,数组的特性是可以使用索引的方式来快速定位对象的位置,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好.LinkedList是采用链表的方式来实现List接口的,它本身有自己特定的方法,如: addFirst(),addLast(),getFirst(),removeFirst()等. 由于是采用链表实现的,因此在进行insert和remove动作时在效率上要比ArrayList要好得多!适合用来实现Stack(堆栈)与Queue(队列),前者先进后出,后者是先进先出.2:认识和理解之间的差别:遍历方式快慢比较:访问速度的差异:ArrayList>>LinkList添加删除速度:LinkList>>ArrayListThrowable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。一:ErrorError(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。二:ExceptionJava的异常分为两种,一种是运行时异常(RuntimeException),一种是非运行异常也叫检查式异常(CheckedException)。1、运行时异常不需要程序员去处理,当异常出现时,JVM会帮助处理。常见的运行时异常有:- ClassCastException(类转换异常)
- ClassNotFoundException
- IndexOutOfBoundsException(数组越界异常)
- NullPointerException(空指针异常)
- ArrayStoreException(数组存储异常,即数组存储类型不一致)
- 还有IO操作的BufferOverflowException异常
2、非运行异常需要程序员手动去捕获或者抛出异常进行显示的处理,因为Java认为Checked异常都是可以被修复的异常。常见的异常有:- IOException
- SqlException
PreparedStatement与Statement 的使用注意;https://blog.csdn.net/u011161786/article/details/48394751;http://www.cnblogs.com/raymond19840709/archive/2008/10/13/1309657.html1 、 PreparedStatement 接口继承 Statement , PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。2 、作为 Statement 的子类, PreparedStatement 继承了 Statement 的所有功能。三种方法execute 、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数3 、在 JDBC 应用中 ,应该始终以 PreparedStatement 代替 Statement. 也就是说 , 在任何时候都不要使用 Statement.基于以下的原因 :一 . 代码的可读性和可维护性 .虽然用 PreparedStatement 来代替 Statement 会使代码多出几行 , 但这样的代码无论从可读性还是可维护性上来说 . 都比直接用Statement 的代码高很多档次 :stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");//stmt 是 Statement 对象实例perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");perstmt.setString(1,var1);perstmt.setString(2,var2);perstmt.setString(3,var3);perstmt.setString(4,var4);perstmt.executeUpdate(); //prestmt 是 PreparedStatement 对象实例对于第一种方法可读性差 . 别说其他人去读你的代码 , 就是你自己过一段时间再去读 , 都会觉得伤心 .PreparedStatement 尽最大可能提高性能 .语句在被 DB 的编译器编译后的执行代码被缓存下来 , 那么下次调用时只要是相同的预编译语句就不需要编译 , 只要将参数直接传入编译过的语句执行代码中 ( 相当于一个涵数 ) 就会得到执行 . 这并不是说只有一个 Connection 中多次执行的预编译语句被缓存 , 而是对于整个 DB 中 , 只要预编译的语句语法和缓存中匹配 . 那么在任何时候就可以不需要再次编译而可以直接执行 . 而 statement 的语句中 , 即使是相同一操作 , 而由于每次操作的数据不同所以使整个语句相匹配的机会极小 , 几乎不太可能匹配 . 比如 :insert into tb_name (col1,col2) values ('11','22');insert into tb_name (col1,col2) values ('11','23');即使是相同操作但因为数据内容不一样 , 所以整个个语句本身不能匹配 , 没有缓存语句的意义 . 事实是没有数据库会对普通语句编译后的执行代码缓存 .当然并不是所以预编译语句都一定会被缓存 , 数据库本身会用一种策略 , 比如使用频度等因素来决定什么时候不再缓存已有的预编译结果. 以保存有更多的空间存储新的预编译语句 .三 . 最重要的一点是极大地提高了安全性 .即使到目前为止 , 仍有一些人连基本的恶义 SQL 语法都不知道 .String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";如果我们把 [' or '1' = '1] 作为 varpasswd 传入进来 . 用户名随意 , 看看会成为什么 ?select * from tb_name = ' 随意 ' and passwd = '' or '1' = '1';因为 '1'='1' 肯定成立 , 所以可以任何通过验证 . 更有甚者 :把 [';drop table tb_name;] 作为 varpasswd 传入进来 , 则 :select * from tb_name = ' 随意 ' and passwd = '';drop table tb_name; 有些数据库是不会让你成功的 , 但也有很多数据库就可以使这些语句得到执行 .而如果你使用预编译语句 . 你传入的任何内容就不会和原来的语句发生任何匹配的关系 . 只要全使用预编译语句 , 你就用不着对传入的数据做任何过虑 . 而如果使用普通的 statement, 有可能要对 drop,; 等做费尽心机的判断和过虑 .Java新知识系列 四的更多相关文章
- Java新知识系列 七
抽象类和接口的区别和特点 java的JDK中包含的五个工具 编译型语言和解释型语言 Java和C++的区别` 常见的ASCII的值 Forward和Redirect之间的对比 Web Service ...
- java新知识系列 一
内联函数: 所谓内联函数就是指函数在被调用的地方直接展开,编译器在调用时不用像一般函数那样,参数压栈,返回时参数出栈以及资源释放等,这样提高了程序执行速度. 对应Java语言中也有一个关键字final ...
- java新知识系列 五
类方法和对象方法的使用限制 abstract修饰符的注意 静态变量只能在类主体中定义,不能在方法中定义 线程的各种方法差别 关于抽象类 什么是中间件 Servlet生命周期的三个主要方法 可以修饰类的 ...
- java新知识系列 三
1:trycatch中需要注意的地方. 2:ServletConfig以及ServletContext对象. 3: Spring事务属性的种类: 传播行为.隔离级别.只读和事务超时. 5:关于程序 ...
- java新知识系列 二
1:数据库事务隔离以及事务隔离的级别 数据库事务隔离: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别:为了解决更新丢失,脏读,不可重读(包括虚读和幻读)等问题在标准SQL规 ...
- Java新知识系列 八
什么是死锁,死锁的原因和必要条件: []什么是死锁,死锁的原因和必要条件: 死锁:死锁的原因在于进程在等待其它进程占有的某些资源,而自身的资源又被其它进程等待着,造成了死循环. 出现死锁的 ...
- java新知识系列 六
sleep和wait的区别有: Servlet方法的使用 方法重写的规则,以及两同两小一大原则: DispatcherServlet的解析 依赖注入DU和控制反转Ioc AOP和OOP的区别 Spri ...
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
随机推荐
- SUSE12Sp3安装配置.net core 生产环境-总汇(持续更新中...)
最近正在使用SUSE系统,项目环境是没有外网的,所以提供的基本都是离线安装,对应的安装包可能需要自行去下载,我这边就不整理了. 网上查找SUSE的资料比较少,于是整理了一下,希望对有需要的人有一点点帮 ...
- JS数组slice()和splice()的区别
以前还是纯小白的时候,总会搞混JS数组的 slice() 和 splice() 方法.因为这2个方法名字太像了,就差一个字母,语法也有类似之处. 现在久了没用,有时候也会忘记,所以做一个总结来区 ...
- [Swift]LeetCode36. 有效的数独 | Valid Sudoku
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to th ...
- 微信小程序自定义导航栏
微信小程序需要自定义导航栏,特别是左上角的自定义设置,可以设置返回按钮,菜单按钮,配置如下: 1.在app.json的window属性中增加: navigationStyle:custom 顶部导航栏 ...
- 8.Flask-Script
Flask-script的作用是可以通过命令行的形式操作flask.安装方式:pip install flask-script 1.1.command装饰器 (1)创建manage.py from f ...
- 并发编程(十二)—— Java 线程池 实现原理与源码深度解析 之 submit 方法 (二)
在上一篇<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中提到了线程池ThreadPoolExecutor的原理以及它的execute方法.这篇文章是接着上一篇文章 ...
- Android 解压zip文件(支持中文)
过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...
- Java基础8:深入理解内部类
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- 记一次Eureka启动报Failed to start bean 'eurekaAutoServiceRegistration' 。。。错误
在一次项目迁移的过程中,新导入了两个依赖,结果项目启动就报错,如下: 主要原因是:Failed to start bean 'eurekaAutoServiceRegistration'; neste ...
- 2018年Fintech金融科技关键词和入行互金从业必懂知识
2018年过去大半,诸多关键词进入眼帘: 5G,消费降级,数据裸奔,新零售,AI,物联网,云计算,合规监管,风控,割韭菜,区块链,生物识别,国民空闲时间以及金融科技. 这些词充斥着我们的生活和时间,而 ...