参考:Java核心技术卷2 高级特性 第八章 三种用于处理代码的技术: 脚本API使得调用诸如JavaScript和Groovy这样的脚本语言代码 可以使用编译器API在应用程序内部编译Java代码 注解处理器可以在包含注解的Java源代码和类文件上进行操作。 注解不会改变程序的编译方式,Java编译器对于包含注解和不包含注解的代码会生成相同的虚拟机指令。 在Java中,注解是当做一个修饰符来使用的,被置于被注解项之前,中间没有分号。 语言模型API,可以使用语言模型API来分析源码级的注解,与呈现类和方法的虚拟机表示形式的反射API不同,语言模型API让我们可以根据Java语言的规则去分析Java程序。
参考:Java核心技术 卷I 基础知识 一个对象变量可以指示多种实际类型的现象被称为多态。在运行时能够自动地选择调用哪个方法的现象被称为动态绑定。 (4)当程序运行,并且采用动态绑定调用方法时,虚拟机已定调用与x所引用对象的实际类型最合适的那个类的方法。假设x的实际类型是D,它是C的子类。 if(otherObject==null) return false; (4)比较this和otherObject是否属于同一个类,如果equals的语义在每个子类中有所改动,就使用getClass检测
Java 核心技术 3.1. 反射机制 3.2. 异常 3.3. 多线程 3.4. 文件与 I\O 流 ---- 3. Java 核心技术 3.1. /java-programming/exceptions-java 在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。 在以下 4 种特殊情况下,finally 块不会被执行: 在 finally 语句块第一行发生了异常。 Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4 节)。 Java Io 流共涉及 40 多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。
***************** java基础 ***************** 一、java 中的局部变量、实例变量和类变量 二、java中的基本类型和引用类型 三、java中的位操作符 许多框架在对类进行实例化的时候会调用空参构造器,所以在构建类的时候最好明确提供一个空参的构造器以防止出错; 构造器一般用 public 修饰,少数情况会将构造器私有,来限制类对象的创建(比如单例设计的时候); 4、 前提是前面没有 return); finally 中的语句执行的时机是在 return 之前,finally中最好不要有 return ,因为可能会覆盖 try–catch 中的 return; 4、 Documented:支持 javadoc 等工具文档化; @Inherited:注解可以被子类继承; (3)自定义注解:注解的参数用方法描述(方法名为参数名,返回值类型是参数类型,default指定默认值) 4、 ) 3、泛型擦除:泛型只存在于编译期,编译好的 class 文件反编译之后是看不到泛型的(伪泛型,目的是为了兼容以前没有泛型的版本) 4、擦除补偿 (1)擦除带来的问题:以下的操作都无法通过编译,
超类的private属性并不能被子类访问。假如我们编写一个Manager类继承Employee类。
掌握Java核心技术是学习和掌握好Java技术的关键,下边分17个点对这些Java核心技术进行讲解。 >>>3.Java是典型的强类型语言,即必须声明变量的类型,Java中有8种类型,6种数值类型(4个整数型和2个浮点型)、一个字符类型和一个boolean类型。 >>>4.强制类型转换: int nx = (int) x; // (语法:用圆括号将目标类型括起来,后面跟上要转换的变量); >>>5.Java不能为单独的方法,如main方法,定义局部常量,而只能为类定义常量 常量定义于main方法的外边,而且必须有关键字 static final; >>>6.字符串的子串: String str = hello""; String str1 = str.substring(0,4) >>>13.对象的类型转换: Manager boss = (Manager) args[0]; >>>14.Java数组和Java向量的区别: Java数组可以存储任何类型的变量,Java向量只能存储对象类的实例
做java有一段时间了。经常写业务代码,长时间里,自己只知道怎么使用其中的api,对于java的理解很多就忘记了。 正好极客时间里面出来了一个课程关于JAVA核心技术的讲解,自己也开始学习,期望能提高自己对java的理解。 首先提出需要的问题。 Java平台的理解 Java是解释执行吗? Java平台的理解 : 一个面向对象编程的语言 具有封装,继承,多态特性 一次执行,处处运行。与平台无关性。可以让java程序在别的平台上运行,当然这是由JVM确定的。 java在第一次编译生成.class文件。JVM运行.class文件。与c还有c++区别最大的一点就是开发者不用在纠结各个操作系统的区别,内存管理在Java上也弱化了很多。 Java的大数据生态。在生态上Java可以说是最成熟的一种解决方案。hadoop,spark,hive等等,都提供Java语言的支持。
>>>用0填充高位>>用符号位填充高位<<<不存在 冷知识吧,也就当年校招见过人问过 3.java没有多维数组,只有一维数组 我们所说的二维数组,本质上是数组的数组 4.编译多个名字差不多的文件 如 AbcController 和AbcService两个文件,javac Abc*.java 即可一次性编译两个 5.比较是不是同一个类 用equals而不是instanceof 因为子类instanceof也报true Objects.equals 同样是基础书,我偏向think in java 。 8.异常处理 一.异常处理不能顶替简单的测试。就是不要随便利用异常进行业务代码,其实这个在其他语言里面很经常在具体的异常里面进行相应的业务操作。 9.断言,有点想深入了解,但是和think in java 里面都是说了几句。看来断言的实际使用真的很少,而且个人观感也是if,try,log等就可以代替,并且这三种的使用很频繁。 12.xml,这些的文件解析java有自带的功能实现啊,但是考虑到文档的可读性,,,我还是选择第三方的,因为他们的文档接地气啊... 13.执行sql语句的防注入,其实就是select * from emp
LuckQI 在这里你可以得到不只是技术,关注即可习得新技能 做java有一段时间了。经常写业务代码,长时间里,自己只知道怎么使用其中的api,对于java的理解很多就忘记了。 正好极客时间里面出来了一个课程关于JAVA核心技术的讲解,自己也开始学习,期望能提高自己对java的理解。 首先提出需要的问题。 Java平台的理解 Java是解释执行吗? Java平台的理解 : 一个面向对象编程的语言 具有封装,继承,多态特性 一次执行,处处运行。与平台无关性。可以让java程序在别的平台上运行,当然这是由JVM确定的。 java在第一次编译生成.class文件。JVM运行.class文件。与c还有c++区别最大的一点就是开发者不用在纠结各个操作系统的区别,内存管理在Java上也弱化了很多。 Java的大数据生态。在生态上Java可以说是最成熟的一种解决方案。hadoop,spark,hive等等,都提供Java语言的支持。
可以点击java核心技术讲解学习五 这篇文章来说下简单的知识,也是我们经常用的String ,StringBuffer,StirngBuilder. 在Java9中引入了一种新的设计,将其底层改为byte数组,数据存储方式改为了byte数组加上一个标识编码。 在Java8中 对字符串进行了优化,字符串拼接 编译的时候会直接编译成StringBuilder。 了解其类型让我们在开发过程中更加方便 int和Integer int int就是我们常说的几种原始类型之一(boolean、byte 、short、char、int、float、double、long)字节占用是4字节 等下次再进行分析 Java原始数据和引用类型局限性 原始数据类型在泛型中不能使用,我们在使用泛型的时候必须转为Object类型。 无法高效的表达数据,也不方便表达复杂的数据结构。
1.4 Java 发展简史 本节将介绍 Java 的发展简史。这些内容来自很多出版资料(最重要的是 SunWorld 的在线杂志 1995 年 7月刊上对 Java 创建者的专访。) 1996 年年初,Sun 发布了 Java 的第 1 个版本: 人们很快地意识到 Java1.0 不能用来进行真正的应用开发。 在此期间, Java applet 采用低调姿态,并淡化了客户端的应用,但 Java 却成为服务器端应用的首选平台。 直到 201丨年 Oracle 发布了 Java的一个新版本,Java ?, 其中只做了一些简单的改进。 2014 年 ,Java 8终于发布,在近 20 年中这个版本有了最大的改变。 Java 8 提供了一种“ 函数式” 编程方式,可以很容易地表述并发执行的计算。 所有编程语言都必须与时俱进,Java在这方面显示出非凡的能力。 表 1-1 展示了 Java 语言以及类库的发展状况。
第 1 章 Java 程序设计概述 1996 年 Java 第一次发布就引起了人们的极大兴趣。关注 Java 的人士不仅限于计算机出版界,还有诸如《纽约时报》《华盛顿邮报》《商业周刊》这样的主流媒体。 本章将简要地介绍一下 Java 语言的发展历史。 1.1 Java 程序设计平台 本书的第 1 版是这样描写 Java 的:“ 作为一种计算机语言, Java 的广告词确实有点夸大其辞。 1 ) 简单性 2 ) 面向对象 3 ) 分布式 4 ) 健壮性 5 ) 安全性 6 ) 体系结构中立 7 ) 可移植性 8 ) 解释型 9 ) 高性能 10 ) 多线程 11 ) 这些开发人员并不觉得 Java 简单。很多年之后 Java 开发环境才迎头赶上如今,Java 开发环境已经远远超出大多数其他编程语言的开发环境简单的另一个方面是小。 在本质上,Java 的面向对象能力与 C++是一样的。 开发 Java 时面向对象技术已经相当成熟。 Java 的面向对象特性与 C++ 旗鼓相当。
继续我们的Java核心知识点的学习。上面一篇说过虚拟机还有Java世界平台的简单知识,还顺便总结了Error和Exception相关内容看相关内容,请阅读Java核心技术讲解学习一。 Exception e){ e.printStackTrace(); }finally { lock.unlock(); } 但是在Java7 如今的Java平台,开始采用java.lang.ref.Cleaner 代替finalize.Cleaner 的实现使用了幻象引用。这是一种常见的post-mortem清理机制。
什么是动态代理 Java标准库提供了一种动态代理(Dynamic Proxy)的机制:可以在运行期动态创建某个interface的实例。 package ProxyStudy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public package ProxyStudy; import java.lang.reflect.Proxy; public class Main { public static void main
上一节我们探讨了垃圾回收算法,简单的了解下垃圾回收在程序虚拟机中是怎样运行的。我们平常在开发中经常用的虚拟机是HotSpot,那么该虚拟机是怎样实现的呢? HotSpot 算法的实现 我们知道在对象创建时候都会形成一条链,我们的可达性分析就是从GC Root节点上找引用的,其中这个节点主要是在全局性的引用于与执行上下文中。由于以下原因导致。我们现在虚拟机大部分使用的是准确式GC 现在程序很多数据都是在数百M设置是数百GB,如果还要逐个检查每个引用,就容易出现问题。性能损失很多。 还有一点就是可达性
前天我们在写Java技术讲解的时候说过引用现在在Java中分为四种类型,强引用,软引用,弱引用,幻象引用。但是这几者之间有什么关系呢? Java中对象的可达性 在Java中我们都是通过分析来计算对象是否还是存活状态。不是存活状态的对象才能 被清理掉。那么这个分析就是称为可达性分析。 在 虚拟机书上是这么定义的 虚拟机栈中引用的对象 -- 虚拟机栈 线程私有的属性 方法区中静态属性引用的对象 方法区中常量引用的对象 --方法区 与java堆一样都是各个线程共享的内存区域。 垃圾回收算法 说完对象的引用之后我们都知道对象在哪种状态会被回收,然而在Java中我们使用的是gc来进行回收的那么,gc是利用什么条件进行回收呢?我们说下gc的算法了解下。
,这种情况在Java中也是存在的。 { public static void main(String[] args) { MyThread4 myThread = new MyThread4(); Lock 的使用 使用 Java5 中的 Lock 对象实现同步的效果。 test4 = new Test4(); Runnable runnable = new Runnable() { @Override public ("test4.lock.hasQueuedThreads() = " + test4.lock.hasQueuedThreads()); //test4.lock.hasQueuedThread
在Java中,使用构造器构造新实例。构造器是一种特殊的方法,用来构造并初始化对象。 在实际开发中,通常需要将对象存放在一个变量中来达到多次使用的目的。 在Java开发中,一定要认识到,一个对象变量并没i月实际包含一个对象,而仅仅使用一个对象,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。 4.执行这个构造器的主体。 方法参数: Java中的参数是一种值引用。 首先,观察一下基本数据类型(数字、布尔值)。 看到这里,或许会认为Java的对象参数是引用调用,实际上,并不是。
1.3 Java applet 与 Internet 这里的想法很简单: 用户从 Internet 下载 Java 字节码, 并在自己的机器上运行。在网页中运行的 Java 程序称为 applet。 要使用 applet, 需要启用 Java 的 Web 浏览器执行字节码。不需要安装任何软件。任何时候只要访问包含 applet 的网页都会得到程序的最新版本。 许多人相信 applet 的魅力将会导致 Java 迅速地流行起来。然而, 初期的兴奋很快就淡化了。 不同版本的 Netscape 与 Internet Explorer 运行不同版本的 Java, 其中有些早已过时。这种糟糕的情况导致更加难于利用 Java 的最新版本开发applet。 后来,Java 遭遇了严重的安全问题,浏览器和 Java 浏览器插件变得限制越来越多。如今,要在浏览器中使用 applet, 这不仅需要一定的水平, 而且要付出努力。
因为在实习中,文章更新速度可能有点慢,初学JAVA安全,内容如有不恰当的地方,欢迎各位大佬指正 今天写一下Servlet的一些核心技术,后面更新完Filter之后我会对这两个进行一个总结。 此外,不同版本的Servlet所需的Java/JDK版本也不相同。