一,资源

基础教学:lecturevideolecturer: Matt Stoker

Java教学:http://www.runoob.com/java/java-intro.html【菜鸟教程,非常适合复习】

Ref: JAVA 学到什么水平就可以转战 Android 了

 

Ref:设计模式菜鸟教程

Ref:Java教程

Ref: Java code 实例

  

二,Android开发初探

 第一课:

[Java] Java programming - basic level 

观后感,应该总结一套控件代码:控件代码收集

看上去不错de样子。后记,貌似没有用了,有了Material Design。

 

Ref: chenyangcun/MaterialDesignExample

Ref: 加载图片助手:https://www.fresco-cn.org/

 

第二课:

现代Android开发:一些建议

如果是色彩盲,请自行收藏这个网站Material Design Color Palette Generator【颜色、图标】
从一开始起就严格按照material design写Material Design

不要自定义一堆padding margin,但你需要边框,边距的时候,请看看?android:attr/里面有木有你需求的(由于android studio强大的补全功能,你一般只需打几个关键词就有提示了),比如你需要给一个ImageButton加点击效果,不要傻不拉几的去写一个selector了,你只需要输入 item select这些关键词,自动补全就会给你提示了。

不要定义一大堆乱七八糟的字体大小了,materail design上的几种基本字体大小可以满足你!

再也不要使用ListView了,改成RecycleView

再也不要寻找第三方下拉刷新控件了,SwipeRefreshLayout肯定符合你的要求(不信你看,知乎Android客户端都是用的这个(●ˇ∀ˇ●))。

再也不要使用第三方侧滑栏了,DrawerLayout能满足你!

再也不要使用ViewPagerTabStripe这一类的第三方Tab控件了,请使用TabLayout!

再也不用找圆形头像控件,圆角控件了,其他的Univeral Image Loader /Picasso也不用看了,直接上Fresco | Fresco 中文说明吧,它都有!不如用省下的时间看看Fresco的源码。
 

关于Material Design,控件章节做介绍。

相关视频讲解:谷歌Material Design设计语言详解

 

三,课程体系

本次学习基于廖雪峰 的 Java课程.

[Java] Java programming - basic level

 

以及 Spring系类:https://spring.io/projects, such as Spring Boot

具体详见:[Spring] What is Spring Framework

  

   /* continue */

 

 

 

Java初步复习


这里先复习下Java语言基础知识,耗时五小时。 

参考:Java 教程

 

Java分为三个体系

  • JavaSE (J2SE)  (Java2 Platform Standard Edition,java平台标准版)
  • JavaEE (J2EE)  (Java 2 Platform,Enterprise Edition,java平台企业版)
  • JavaME (J2ME)  (Java 2 Platform Micro Edition,java平台微型版)。

   

基本语法

  • 主方法入口:所有的Java 程序由public static void main(String []args)方法开始执行。
  • # javac Hello.java --> Hello.class.
  • # java Hello.class执行.

 

Java标识符

  • 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
  • 首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合

 

Java修饰符

像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

  • 访问控制修饰符 : default, public , protected, private
  • 非访问控制修饰符 : final, abstract, strictfp (用于限制浮点计算并在执行浮点变量操作时确保每个平台上的结果相同)

 

Java变量

Java中主要有如下几种类型的变量

  • 局部变量
  • 类变量(静态变量)
  • 成员变量(非静态变量)

 

Java数组

 

Java枚举

 

Java关键字

下面列出了Java保留字。这些保留字不能用于常量、变量、和任何标识符的名称。

类别 关键字 说明
访问控制 private 私有的
protected 受保护的
public 公共的
类、方法和变量修饰符 abstract 声明抽象
class
extends 扩允,继承
final 最终值,不可改变的
implements 实现(接口)
interface 接口
native 本地,原生方法(非Java实现)
new 新,创建
static 静态
strictfp 严格,精准
synchronized 线程,同步
transient 短暂
volatile 易失
程序控制语句 break 跳出循环
case 定义一个值以供switch选择
continue 继续
default 默认
do 运行
else 否则
for 循环
if 如果
instanceof 实例
return 返回
switch 根据值选择执行
while 循环
错误处理 assert 断言表达式是否为真
catch 捕捉异常
finally 有没有异常都执行
throw 抛出一个异常对象
throws 声明一个异常可能被抛出
try 捕获异常
包相关 import 引入
package
基本类型 boolean 布尔型
byte 字节型
char 字符型
double 双精度浮点
float 单精度浮点
int 整型
long 长整型
short 短整型
null
变量引用 super 父类,超类
this 本类
void 无返回值
保留关键字 goto 是关键字,但不能使用
const 是关键字,但不能使用

 

Java注释

 

Java 空行

 

继承

被继承的类称为超类(super class),派生类称为子类(subclass)。

 

接口

/* implement */ 

 

 

 

 

Java进阶复习


大数据实战总结

Consumer.java

[1]

Kafka的各个版本:https://archive.apache.org/dist/kafka/

import kafka.utils.ShutdownableThread;
public class Consumer extends ShutdownableThread { ... }

ShutdownableThread是一个可以循环执行某个方法(doWork方法)的线程,也提供了shutdown方法同步等待该线程真正运行结束,代码比较简单。利用了CountDownLatch来阻塞调用shutdown的线程,待doWork真正执行结束时,再唤醒其他阻塞的线程。

    @Override
    public void doWork() {

        consumer.subscribe(Collections.singletonList(this.topic));
        ConsumerRecords<Integer, String> records = consumer.poll(Duration.ofSeconds(1));
        debug_index++;
        System.out.println("\n[" + debug_index + "] 消费到消息数:" + records.count());
        if (records.count() > 0) {
            for (ConsumerRecord<Integer, String> record : records) {
                LOG.warn("[" + debug_index + "]Received message: (" + record.key() + ", " + record.value() + ") at offset " + record.offset());
                String value = record.value();
/* 将消息进行下一步处理 */ } } System.out.println(
"[" + debug_index + "] nothing."); }

 

[2]

如何导入Kafka包?

Ref: Kafka Using Java. Part 1.

Ref: Kafka Using Java. Part 2.

Ref: Configuring IntelliJ IDEA for Kafka 

import kafka.utils.ShutdownableThread;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;

 

原文链接:https://blog.csdn.net/hwssg/article/details/48623745

首先创建一个java project,网上很多说需创建maven工程,本人经过测验,发现maven工程和普通的java project均可调用。

需要注意,工程所采用的jar包,可以在相应版本的kafka安装文件夹的lib目录下引用,不同版本的jar包可能不通用,

如果出现java.lang.NoClassDefFoundError: scala/reflect/ClassManifest的报错,可能是由于jar包不匹配引起的。

 

通过Maven,需要在依赖中设置.

[Java] Java programming - basic level

 

[3]

Java的模板类.

# 原型
public
class KafkaConsumer<K, V> implements Consumer<K, V>
# 使用案例 consumer
= new KafkaConsumer<>(props);

 

 

语法特性 (详细)

1. 基本数据类型

  • 内置数据类型

byte,节省空间。

System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.  .Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
  • 引用类型

对象、数组都是引用数据类型。

所有引用类型的默认值都是null。

  • Java 常量
final double PI = 3.1415927;
  • 自动类型转换
低  ------------------------------------>byte,short,char—> int —> long—> float —> double 
  • 强制类型转换
  • 隐含强制类型转换

Ref: 例子不错的链接

 

2. 变量类型

3. 修饰符

  • 访问修饰符

我们可以通过以下表来说明访问权限:

[Java] Java programming - basic level

 

  • 非访问修饰符

static变量

static方法

 

final变量

final方法不能被子类修改

final类不能被继承其任何特性

 

abstract方法

abstract类,包含若干个抽象方法则必为抽象类,或抽象类可以不包含抽象方法

 

synchronized 修饰符

// Synchronized 锁定的是对象而非函数或代码。 
public
synchronized void showDetails(){ ....... }

 

transient 修饰符

对应的变量加上transient关键字,那么,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。

参考:https://www.cnblogs.com/widow/p/3952827.html

 

volatile 修饰符

Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。

这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。

使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。

由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

 

4. 运算符

instanceof 运算符

String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真

  

5. Java 循环结构 - for, while 及 do...while

Java 增强 for 循环,为方便数组访问。

public class Test {
public static void main(String args[]){
int [] numbers = {10, 20, 30, 40, 50}; for(int x : numbers ){ System.out.print( x ); System.out.print(","); }
} }

 

6. 分支结构 - if...else/switch

# 浮点数
Math.abs(x-0.1) < 0.00001

# 是否指向同一对象
s1 == s2

# 判断内容是否相等,要小心s1=null,会报错
s1 != null && s1.equals("hello")
"hello".equals(s1)

 

7. 数字(Number & Math 类)

  • Number类

所有的 包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。

当 x 被赋为整型值时,

(1) 由于x是一个对象,所以编译器要对x进行装箱

(2) 然后,为了使x能进行加运算,所以要对x进行拆箱

简单一点说,

(1) "装箱" 就是自动将基本数据类型转换为包装器类型;

(2) "拆箱" 就是自动将包装器类型转换为基本数据类型。

Integer x = 5;
x =  x + 10;

 

  • Math 类

该类提供了独立的 "变量" "方法"

public class Test {  
    public static void main (String []args)  
    {  
        System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));  
        System.out.println("0度的余弦值:"   + Math.cos(0));  
        System.out.println("60度的正切值:"  + Math.tan(Math.PI/3));  
        System.out.println("1的反正切值: "  + Math.atan(1));  
        System.out.println("π/2的角度值:"  + Math.toDegrees(Math.PI/2));  
        System.out.println(Math.PI);  
    }  
}

 

8. 字符串

  • Char类
Character ch = new Character('a');

提供了一些好用的方法:

1 isLetter()
是否是一个字母
2 isDigit()
是否是一个数字字符
3 isWhitespace()
是否是一个空格
4 isUpperCase()
是否是大写字母
5 isLowerCase()
是否是小写字母
6 toUpperCase()
指定字母的大写形式
7 toLowerCase()
指定字母的小写形式
8 toString()
返回字符的字符串形式,字符串的长度仅为1

 

  • Java String 类

1    char charAt(int index)
返回指定索引处的 char 值。
2    int compareTo(Object o)
把这个字符串和另一个对象比较。
3    int compareTo(String anotherString)
按字典顺序比较两个字符串。
4    int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。
5    String concat(String str)
将指定字符串连接到此字符串的结尾。
6    boolean contentEquals(StringBuffer sb)
当且仅当字符串与指定的StringButter有相同顺序的字符时候返回真。
7    static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String。
8    static String copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的 String。
9    boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
10    boolean equals(Object anObject)
将此字符串与指定的对象比较。
11    boolean equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 比较,不考虑大小写。
12    byte[] getBytes()
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
13    byte[] getBytes(String charsetName)
使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
14    void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。
15    int hashCode()
返回此字符串的哈希码。
16    int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。
17    int indexOf(int ch, int fromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
18    int indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。
19    int indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
20    String intern()
返回字符串对象的规范化表示形式。
21    int lastIndexOf(int ch)
返回指定字符在此字符串中最后一次出现处的索引。
22    int lastIndexOf(int ch, int fromIndex)
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
23    int lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。
24    int lastIndexOf(String str, int fromIndex)
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
25    int length()
返回此字符串的长度。
26    boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
27    boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
28    boolean regionMatches(int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
29    String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
30    String replaceAll(String regex, String replacement
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
31    String replaceFirst(String regex, String replacement)
使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
32    String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
33    String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
34    boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。
35    boolean startsWith(String prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
36    CharSequence subSequence(int beginIndex, int endIndex)
返回一个新的字符序列,它是此序列的一个子序列。
37    String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
38    String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
39    char[] toCharArray()
将此字符串转换为一个新的字符数组。
40    String toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
41    String toLowerCase(Locale locale)
使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
42    String toString()
返回此对象本身(它已经是一个字符串!)。
43    String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
44    String toUpperCase(Locale locale)
使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
45    String trim()
返回字符串的副本,忽略前导空白和尾部空白。
46    static String valueOf(primitive data type x)
返回给定data type类型x参数的字符串表示形式。
View Code

相关文章:

  • 2021-06-17
  • 2022-12-23
  • 2022-12-23
  • 2021-08-06
  • 2021-11-03
  • 2021-07-24
  • 2021-09-04
  • 2022-12-23
猜你喜欢
  • 2021-11-10
  • 2021-11-17
  • 2022-02-16
  • 2022-12-23
  • 2021-07-04
  • 2021-09-30
相关资源
相似解决方案