j = ++i i = 6 ,j = 5 i = 6 ,j=6 -- 自减: 分为自减在前和 自减在后两种 i = 5 ;j = i-- i = 5 ;j = --i i = 4 ,j = 5 i = 4 ,j=4 (3)算术运算符的使用细节 1)自增自减运算符都作为独立的语句使用,前++(--)和后++(--)都完全等价于 i = i + ( - ) 1 ;
而Java中内置了对字符串的支持,Java中的字符串是一个叫做String的对象。 一般程序在加载到内存地址空间后,会被划分为4个部分,全局数据段、代码段、堆、栈。而全局代码段是用来存放全局变量的。 中如果我们写下这样的代码: char* psz1 = "abc"; char* psz2 = "abc"; 那么在程序加载到内存中时,在全局数据段中会存在一个连续的内存空间保存的是 'a','b','c','\0' 这4个值 数组 java中数组的定义如下: int[] Array1 = new int[10]; //定义了一个拥有10个整型数据的数组 int[] Array2 = new int[]{1, 2, 3, 4, 5, 6, 7,8, 9, 0}; //创建数组并初始化 int[] Array3 = {1,2 ,3,4,5,6,7,8,9,0}; 相比于C中数组的定义来说,Java中的定义更容易让人理解,对应数据类型后面加一对
Java并发学习4【面试+工作】 九.fork&join Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架 其中Vector(同步的ArrayList)和Stack(继承自Vector,先进后出)、HashTable(继承自Dictionary,实现了Map接口)是比较老的容器,Thinking in Java
Java程序的进程(Java的一个程序运行在系统中)里至少包含主线程和垃圾回收线程(后台线程)。 [1] main——main线程,用户程序入口 [2] Reference Handler——清除Reference的线程 [3] Finalizer——调用对象finalize方法的线程 [4] 处理两个文件则需要: 1| 5秒读取文件A 2| 2秒处理文件A 3| 5秒读取文件B 4| 2秒处理文件B 5| --------------------- 6| 总共需要14秒 从磁盘中读取文件的时候 看下面的顺序: 1| 5秒读取文件A 2| 5秒读取文件B + 2秒处理文件A 3| 2秒处理文件B 4| --------------------- 5| 总共需要12秒 CPU等待第一个文件被读取完 courseId=1003108028 《Java零基础入门教程》 《Java并发编程的艺术》 《Java 7并发编程实战手册》
现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢它这一点 这次主要讲述的是java中的封装型。 在java中类的定义与C++中类的定义类似,只是在java中每定义一个方法或者成员变量都需要在前面添加一个访问的权限修饰符,比如下面的定义 class Student { private String 中默认的访问权限是friendly,但是这个friendly在java中并不是关键字,而且java中的public、private、protected 都必须明确指定,在java中这些关键字对应的访问权限如下 java中不能直接访问内存,虽然它的类都是new出来的,但是资源的回收由垃圾回收机制来完成,那么它有析构函数吗?答案是肯定的,java中也是有析构函数的。
Unicode可以使用UTF-8、UTF-16等不同的编码方式表示,其中UTF-8是一种可变长编码,可以根据不同的字符来使用不同的字节数表示,为了支持更多的字符,UTF-8的编码长度可以达到4字节。 JAVA中 字符常量 和 字符串常量的区别和用法 JAVA中字符常量是一个单独的字符,用单引号(')表示 而字符串常量则是多个字符构成的字符串,用双引号(")表示。 3.字符常量可以直接赋值给字符变量,例如:char c = 'a'; 字符串常量必须用String类来定义,例如:String str = "Hello World"; 4.字符常量可以与其他字符常量或者数值直接进行运算 中 布尔类型 没有明确的大小 * 2.在JAVA中 布尔类型 只有两个取值 true 和 false * 3.在JAVA中 布尔类型 没有 所谓的 0是假 非0是真 * 真 只有 true 假 只有 false * 4.
经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下。 ---- Servlet 生命周期 在 Web 容器中,Servlet 主要经历 4 个阶段,如下图: Servlet 生命周期 加载 Servlet:当 Tomcat 第一次访问 Servlet 的时候 在 Tomcat/conf/web.xml 文件中配置一个名字为default的Servlet,该Servlet在负责访问项目下的静态资源 web.xml 中配置的默认项 4. request.setAttribute(String var1,Object var2)设置要共享的数据资源,并通过request.getAttribute(String var1);来获取传递的资源 4. 【可以】访问 WEB-INF 中的资源 WEB-INF 文件夹是 Java Web 应用的默认安全目录,即客户端无法直接访问,只有服务端可以访问的目录。
数组操作 数组遍历 在笔记3中已经学习了for和for each相关操作,可以使用两者对数组进行变量,但要记住for是通过计数器来进行遍历,而for each则是直接访问数组中的元素值; import java.util.Arrays; public class Demo{ public static void main(String[] args){ char[] chArray 而是数组在 JVM 中的引用地址 System.out.println(chArray) // 结果类似于 [I@7852e922 // 使用 Java 排序算法多样,最常用的则有 冒泡排序、插入排序、快速排序等,进行排序时会修改数组本身; 冒泡排序:经过一轮循环,将最大的数置换到末尾,然后进入下一轮循环,每轮均比上一轮的结束位置靠前一位; import java.util.Arrays } } } // 冒泡排序后 System.out.println(Arrays.toString(chArray)); // Java
背景 本节使用 Java 操作 mongDB。 2.知识 MongoDB 简介 MongoDB是一个文档型数据库,它将数据存储在类似json的文档中。 mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION); return mongoTemplate; } } 4. 扩展 我的代码示例见:https://github.com/vir56k/java_demo/tree/master/mongo_demo 7.参考: https://docs.spring.io/spring-boot
使用流 本文demo源码: https://github.com/Ryan-Miao/someTest/tree/master/src/main/java/com/test/java8/streams package com.test.java8.streams; import com.google.common.collect.Lists; import com.test.java8.streams.entity.Dish ; import org.junit.Before; import org.junit.Test; import java.util.List; import static java.util.stream.Collectors.toList List<Integer> nums = Lists.newArrayList(3, 1, 4, 0, 8, 5); Optional<Integer> max = nums.stream().reduce 注 以上内容均来自《Java8 In Action》。
System.out.println(i); i >>>= 1; System.out.println(i); } } // output /* 2 4 8 4 2 */ 三元运算符 布尔表达式 ? ,对Java来说,唯一用到标签的地方就是在循环语句之前。 为解决这一问题,Java提供了一个名为finalize()的方法,可为我们的类定义它。 Thinking in Java学习杂记(5-6)
前面几节学习到的CDI内容,基本上都是hard-code,以硬编码的方式在代码里指定注入类型,这并非依赖注入的本意,依赖注入的优势之一在于“解耦”,这一节我们将学习如何利用配置来动态注入的类型及属性初始化 /jsf/html" 4 xmlns:f="http://java.sun.com/jsf/core" 5 xmlns:ui="http://java.sun.com/jsf " 4 xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml ; 4 import java.io.InputStream; 5 import java.util.logging.Logger; 6 7 import javax.enterprise.event.Observes /jsf/html" 4 xmlns:f="http://java.sun.com/jsf/core" 5 xmlns:ui="http://java.sun.com/jsf/facelets
dom4j是一个优秀的开源项目,专用于xml文件的读写,而且支持强大的xpath. 下面的代码演示了对xml文件demo.xml的读写 demo.xml内容: 1 <? </item> 13 14 <telephone>010-123123</telephone> 15 </card> 16 </address-list> java 代码: 1 package jmyang.dom4j; 2 3 /** 4 *
Title:dom4j测试
5 *Description: 使用xpath读取节点内容 Company: infosky.com.cn
8 * @author:yjmyzz@126.com 菩提树下的杨过 9 * @version 1.0 10 */ 11 12 import java.util .*; 13 import java.io.*; 14 import org.dom4j.*; 15 import org.dom4j.io.*; 16 17 18 public class XmlTest关键的一点是:CircuitBreaker 只是一套规范和接口,具体的实现者是 Resilence4J,Resilence4J 也是 Spring 用于替换 Hystrix 的新组件。 Resilence4J 提供了几个核心模块,按重要程度排序如下: CircuitBreaker 断路 ratelimiter 速率限制 bulkhead 舱壁 retry 自动重试 timelimiter permitted-number-of-calls-in-half-open-state: 2 # 熔断器开启后,记录异常的类 record-exceptions: - java.lang.Exception <artifactId>resilience4j-bulkhead</artifactId> </dependency> 在 applicatin.yml resilience4j 下添加关于 首先我们添加 application.yml resilience4j 下的相关配置。
0x00 SNMP4J介绍 SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应。 JAVA 1.4.1或更高版本(2.0或更高版本需要jdk1.6及以上的支持)。 基于LOG4J记录日志。 使用GETBULK实现Row-based的有效的异步表格获取。 支持多线程。 0x03 使用SNMP4J实现管理端的步骤 该部分说明了利用SNMP4J编写SNMP管理端的大致过程,读者在阅读之后会对SNMP4J有一个宏观上的认识。 pdu获得mib信息(之前绑定的OID的值),方法:VaribleBinding get(int index) 5.1、获取远程计算机的名称 package me.gacl.snmp; import java.io.IOException IOException e) { e.printStackTrace(); } } } 5.2、获得本机的信息 package me.gacl.snmp; import java.io.IOException
同样的,上述例子中的能量在Java中就对应了Java的数据类型,这些基本的数据类型就构成了Java的Bean,方法,函数等。 说回到Java的数据类型,Java中有8大数据类型,在我看来就像是8大金刚一样,它们分别是: boolean金刚:主判断,法宝为if尺,常用招数——if判断。 在每一台要运行java的机器上都装了虚拟机,虚拟机会根据每台机器做对字节码文件做快速处理,完成字节码到机器码的快速转换。 这一次,我们聊了Java中的八大数据类型,并且借用了8大金刚的概念来阐述它。希望这能让你对java的数据类型有个印象,咱们下回见。
在Java中使用线程封闭技术有:Swing 和 JDBC 的 Connection 对象。 虽然在 Java 语言规范和 Java 内存模型中都没有给出不可变性的正式定义,但不可变性并不等于将对象中的所有域都声明为 final 类型,即使对象中所有的域都是 final 类型的,这个对象也仍然可能是可变的 在 Java 内存模型中,final 域能确保初始化过程的安全性,从而可以不受限制地访问不可变对象,并在共享这些对象时无须同步。 3.2 不可变对象与初始化安全性Java内存模型为不可变对象的共享提供了一种特殊的初始化安全性保证。即使在发布不可变对象的引用时没有使用同步,也仍然可以安全地访问该对象。 Java的线程安全库中的容器类有很多,下面列举一些它们提供的安全发布保证:通过将一个键或者值放入 Hashtable、Collections.synchronizedMap 或者 ConcurrentMap
Java日志框架学习--JUL和Log4j--上 引言 日志框架 市面流行的日志框架 日志门面和日志框架的区别 J JUL简介 JUL组件介绍 实际使用 Logger之间的父子关系 默认配置文件位置 3.日志文件相关的优化,如异步操作、归档、压缩… 4.日志系统的维护 5.面向接口开发 – 日志的门面 ---- 市面流行的日志框架 JUL java util logging Java原生日志框架, 亲儿子 Log4j Apache的一个开源项目 Logback 由Log4j之父做的另一个开源项目 业界中称作log4j后浪 一个可靠、通用且灵活的java日志框架 Log4j2 Log4j官方的第二个版本 ---- JUL JUL简介 JUL全称 Java Util Logging,它是java原生的日志框架,使用时不需要另外引用第三方的类库,相对其他的框架使用方便,学习简单,主要是使用在小型应用中。 官方网站: http://logging.apache.org/log4j/1.2/ Log for java 我们使用log4j技术,主要使用的是其配置文件 Log4j组件介绍 Log4j主要由 Loggers
/audio/3.mp3",name:"113",author:"311111"}, {id:4,src:". /audio/4.mp3",name:"114",author:"411111"} ]; var music=new Vue({ el:'#music /audio/3.mp3",name:"113",author:"311111"}, {id:4,src:". /audio/4.mp3",name:"114",author:"411111"} ]; var music=new Vue({ el:'#music 创建组件 1.cd 到当前目录下 2.vue init webpack-simple 项目名 3.接下来根据提示操作 4.cd 项目名 5.npm install 6.npm run dev 7.只关心
参考:Java核心技术卷2 高级特性 第八章 三种用于处理代码的技术: 脚本API使得调用诸如JavaScript和Groovy这样的脚本语言代码 可以使用编译器API在应用程序内部编译Java代码 注解处理器可以在包含注解的Java源代码和类文件上进行操作。 注解不会改变程序的编译方式,Java编译器对于包含注解和不包含注解的代码会生成相同的虚拟机指令。 在Java中,注解是当做一个修饰符来使用的,被置于被注解项之前,中间没有分号。 语言模型API,可以使用语言模型API来分析源码级的注解,与呈现类和方法的虚拟机表示形式的反射API不同,语言模型API让我们可以根据Java语言的规则去分析Java程序。