能力说明:
精通JVM运行机制,包括类生命、内存模型、垃圾回收及JVM常见参数;能够熟练使用Runnable接口创建线程和使用ExecutorService并发执行任务、识别潜在的死锁线程问题;能够使用Synchronized关键字和atomic包控制线程的执行顺序,使用并行Fork/Join框架;能过开发使用原始版本函数式接口的代码。
暂无个人介绍
02. Kotlin 变量、常量和类型
01. Kotlin 标识符、关键字和注释
00. Kotlin 安装和语言的基本组成
Tomcat 安装和简单使用
Express 框架
Jenkins 使用总结
23 Java 图形化编程
spring boot 之 profile 配置
常见文本编辑器
05. 使用 cordova plugman 编辑和添加插件
Jetty 简单安装和部署 jenkins
00. Node.js 的安装
docker 下安装常用 image
docker Compose 简介
mvnd - the Maven Daemon
Android 反编译工具
Ant 打包安卓apk(2)-手写版
Ant 打包安卓apk(1)-手动档
Ant 实现流程控制、遍历
Ant 简介-下
安卓第三方组件收集
安卓自定义 View 启航
安卓四大组件介绍
JetLinks 社区版安装
ThingsBoard 物联网平台-代码结构分析
Java开发手册-异常日志
阿里Java编程规约【十】 前后端规约
adb 工具位于SDK的 platform-tools 目录下, 因此在命令行中使用ABD的时候,需要通过cd命令,切换到该目录下,或者将platform-tools的路径添加到系统环境变量中,这样就可以直接使用了。
Android Studio 是基于 IntelliJ IDEA 的官方 Android 应用开发集成开发环境 (IDE)。除了 IntelliJ 强大的代码编辑器和开发者工具,Android Studio 提供了更多可提高 Android 应用构建效率的功能,例如: • 基于 Gradle 的灵活构建系统 • 快速且功能丰富的模拟器 • 可针对所有 Android 设备进行开发的统一的环境 • Instant Run,可将变更推送到运行中的应用,无需构建新的 APK • 可帮助您构建常用应用功能和导入示例代码的代码模板和 GitHub 集成 • 丰富的测试工具和框架 • 可捕捉性能、可用性
• Auto import(自动导入) • 对于 Windows,请依次转到“文件 (File)”>“设置 (Settings)”>“编辑器 (Editor)”>“常规 (General)”>“自动导入 (Auto Import)” • 对于 Mac,请依次转到 Android Studio >“偏好设置 (Preferences)”>“编辑器 (Editor)”>“常规 (General)”>“自动导入 (Auto Import)”
Java 在 20 多年发展过程中,与时俱进,为了适应时代的需要,经历过两次重大的版本升级,一个是 Java 5,Java 5 提供了泛型等重要的功能;另一个是提供了 Lambda 表达式和枚举类等重要的功能的 Java 8。 一些重要的 Java 的版本 JDK 1.2(新增集合类), JDK 5(新增泛型), JDK 8(LTS版本,新增 lamda 表达式,方法引用), JDK 11(LTS 版本), JDK 17(LTS 版本)。
Java SE提供java.net包,其中包含了网络编程所需要的最基础一些类和接口。这些类和接口面向两个不同的层次:基于Socket的低层次网络编程和基于URL的高层次网络编程,所谓高低层次就是通信协议的高低层次,Socket采用TCP、UDP等协议,这些协议属于低层次的通信协议;URL采用HTTP和HTTPS这些属于高层次的通信协议。低层次网络编程,因为它面向底层,比较复杂,但是“低层次网络编程”并不等于它功能不强大。恰恰相反,正因为层次低,Socket编程与基于URL的高层次网络编程比较,能够提供更强大的功能和更灵活的控制,但是要更复杂一些。
数据类型 在声明变量或常量时会用到数据类型,在前面已经用到一些数据类型,例如 int、double 和 String 等。Java 语言的数据类型分为:八种基本类型和三种引用类型(数组, class, interface)。
Java语言主要由 5 类元素组成 标识符: 就是变量、常量、方法、枚举、类、接口等由程序员指定的名字。 数字、字母、美元符、下划线(注意不能数字开头) 关键字不能作为标识符。 注意 Java 语言中字母采用的是双字节 Unicode 编码。Unicode 叫作统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符。 关键字(keyword): 被 Java 赋予特殊意义的单词, 所有关键字都是小写 Java语言中的保留字只有两个 goto 和 const, 既不能当作标识符使用,也不是关键字,也不能在程序中使用,这些字符序列称为保留字。 main 不是关键字,但是被虚拟机识别的一个名称
Java 中的控制语句有以下三类: 1. 分支语句:if 和 switch 2. 循环语句:while、do-while和for 3. 跳转语句:break、continue、涉及到return和throw关键字的使用
Java 5 之后提供泛型(Generics)支持,使用泛型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型特性对 Java 影响最大是集合框架的使用。 对于 Java 5 之前程序员而言,使用集合经常会面临一个很尴尬的问题:放入一个种特定类型,但是取出时候全部是 Object 类型,于是在具体使用时候需要将元素强转换为特定类型。但是强制类型转换是有风险的,如果不进行判断就臆断进行类型转换会发生 ClassCastException 异常。 而泛型的引入可以将这些运行时异常提前到编译期暴露出来,这增强了类型安全检查。
在计算机语言中数组是非常重要的集合类型,大部分计算机语言中数组具有如下三个基本特性: 1. 一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。 2. 有序性:数组中的元素是有序的,通过下标访问。 3. 不可变性:数组一旦初始化,则长度(数组中预分配的元素个数)不可变。
标准输入输出流 字符输入: char c = (char)System.in.read(); 字符串输入: BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); String str = buf.readLine(); 使用System.out输出 (标准输出流 System.out )提供的如下方法 print()方法:实现不换行的数据输出; println()方法:与上面方法的差别是输出数据后将换行。 printf()方法:带格式描述的数据输出。该方法包含两个参数,第一个参数中给出输出格式的
java.lang.Object 类 所有 Java 类的最终祖先,编译系统默认继承 Object 类,Object 类包含了所有 Java 类的公共属性和方法。 • Object(): 构造方法 • getClass():Class<?> • public boolean equals(Object obj) :该方法本意用于两个对象的“深度”比较,也就是比较两对象封装的数据是否相等;而比较运算符“==”在比较两对象变量时,只有当两个对象引用指向同一对象时才为真值。但在Object类中,equals方法是采用“==”运算进行比较; • hashCode() • public String t
继承 Java 继承的实现(只支持类的单继承,不支持类多继承,但是支持接口的多实现)。 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类. 定义类时直接通过 extends 关键字指明要继承的父类。
接口 比抽象类更加抽象的是接口,在接口中所有的方法都会被 public abstract 修饰。 注意:Java 8 之后接口中新增加了 default 默认方法和 对 static 方法的支持。 • Java 中不支持多继承,而是通过接口实现比多重继承更强的功能,java 通过接口可以使出于不同层次,甚至不相关的类具有相同的行为. • 接口可以认为是特殊的抽象类, 不能用于直接创建对象。接口的作用在于规定一些功能框架,具体功能的实现则通过该接口约束的类完成。
反射(Reflection)是程序的自我分析能力,通过反射可以确定类有哪些方法、有哪些构造方法以及有哪些成员变量。Java语言提供了反射机制,通过反射机制能够动态读取一个类的信息;能够在运行时动态加载类,而不是在编译期。反射可以应用于框架开发,它能够从配置文件中读取配置信息动态加载类、创建对象,以及调用方法和成员变量。
Java 8 之后推出的 Lambda 表达式开启了 Java 语言支持函数式编程(Functional Programming)的新时代。 Lambda 表达式,也称为闭包(Closure),现在很多语言都支持 Lambda表达式,如 C++、C#、Swift、Objective-C 和 JavaScript 等。为什么 Lambda 表达式这怎么受欢迎,这是因为Lambda表达式是实现支持函数式编程技术基础。 函数式编程与面向对象编程有很大的差别,函数式编程将程序代码看作数学中的函数,函数本身作为另一个函数的参数或返回值,即高阶函数。而面向对象编程是按照真实世界客观事物的自然规律进行分析,
异常指的是程序运行时出现的不正常情况。程序运行过程中难免会发生异常,发生异常并不可怕,程序员应该考虑到有可能发生这些异常,编程时应能正确的处理异常,使成为健壮的程序。 异常是相对于 return 的一种退出机制,可以由系统触发,也可以由程序通过 throw 语句触发,异常可以通过 try/catch 语句进行捕获并处理,如果没有捕获,则会导致程序退出并输出异常栈信息。
多线程协作的基本机制 wait/notify 多线程之间除了竞争访问同一个资源外,也经常需要相互协作,怎么协作呢?本节就来介绍Java中多线程协作的基本机制 wait/notify。 wait 实际上做了什么呢?它在等待什么?之前我们说过,每个对象都有一把锁和等待队列,一个线程在进入 synchronized 代码块时,会尝试获取锁,如果获取不到则会把当前线程加入等待队列中,其实,除了用于锁的等待队列,每个对象还有另一个等待队列,表示条件队列,该队列用于线程间的协作。
IO(Input Output)流 • IO流用来处理设备之间的数据传输 • Java对数据的操作时通过流的方式 • Java用于操作流的对象都在IO包中 • 流按操作数据分为两种: 字节流和字符流 • 流按类型分为: 输入流, 输出流
File类 将文件和文件夹封装成对象,方便操作文件和文件夹 File(String pathname); 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 File(String parent, String child); 根据parent路径名字符串和 child 路径名字符串创建一个新 File 实例。 File(File parent, String child); 根据parent抽象路径名和 child 路径名字符串创建一个新 File 实例。 提示:所有在 java.io 中的类都将相对路径名解释为以用户工作目录开始,你可以通过调用 System.ge
正则表达式(regular expression)用于指定字符串的模式,你可以在任何需要定位匹配某种特定模式的字符串的情况下使用正则表达式。
意图是安卓中重要核心组件之一。 Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个: 启动 Activity 启动服务 传递广播 Intent 分为两种类型: 显式 Intent:按名称(完全限定类名)指定要启动的组件。 通常,您会在自己的应用中使用显式 Intent 来启动组件,这是因为您知道要启动的 Activity 或服务的类名。例如,启动新 Activity 以响应用户操作,或者启动服务以在后台下载文件。
View View.getVisibility() 很显然,我们可以用 View.getVisibility() 来检查一个它是否处于View.VISIBLE状态。这是最基本的检查,如果连这个方法得到的返回值都是View.INVISIBLE或者View.GONE 的话,那么它对用户肯定是不可见的。 View.isShown() 这个方法相当于对 View 的所有祖先调用 getVisibility 方法。