服务器端的编程可以参考另一本书《企业Java编程》(Thinking in Enterprise Java)。

 1.基本类型

基本型别 大小 最小值 最大值  默认值
boolean ----- ----- ------  false
char 16-bit Unicode 0 Unicode 2^16-1   \u0000(null)
byte 8-bit -128 +127  0
short 16-bit -2^15 +2^15-1  0
int 32-bit -2^31 +2^31-1  0
long 64-bit -2^63 +2^63-1  0L
float 32-bit IEEE754 IEEE754  0.0f
double 64-bit IEEE754 IEEE754  0.0d

  数值类型的都有正负之分。

  boolean类型所占的空间没有明确的制定。

   1.java的数值是有符号的,不要忘了还要考虑负数

判断一个数是不是奇数,

if( i % 2 == 1){

...

}

如果i是负数,i%2 的结果将是-1.应该是写成:

if( i%2 ! =0){

    ...

}

2.如果使用小数,默认的将是double类型,要使用float类型,应该显示的指明小数的类型

float f = 1.24f;

3.小数都可能会有精度的丢失,使用float和double做小数计算时可能都会碰到这样的问题,如果就是需要精确地计算,可以考虑使用BigDicemal,整型对应的是BigInteger。这里要用的是new BigDicemal(String)而不能用new BigDicemal(double),否则在构造BigDicemal之前就已经丢失了精度,这是需要注意的。

System.out.println(2.0f - 1.1f);

System.out.println(2.0d - 1.1d);

 2.封装类型

   包装类型包括:Integer 、Long、Short、Byte、Character、Double、Float、Boolean、BigInteger、BigDecmail

  其中BigInteger、BigDecimal没有相对应的基本类型,主要应用于高精度的运算,BigInteger 支持任意精度的整数,BigDecimal支持任意精度带小数点的运算。

   使用BigInteger、BigDecimal不会产生精度丢失的问题,而是用long,float时都需要考虑精度丢失的问题。可能不是很大的数值的计算都会有精度丢失的问题。

   为什么有了基本类型还需要包装类型?很多时候方法的参数是一个对象而非基本类型,例如ArrayList的add方法的参数就是对象。

  想要查看int型的最大值,可以使用Integer.MAX_VALUE。

   3.缓存

缓存是一种典型的空间交换时间的方案,数据库频繁读取时需要考虑缓存,最基本的思路就是Map。

    使用缓存需要考虑的问题:

    1.数据需要缓存多久

    2.缓存数据和真实数据的一致性,当真实数据更新或删除时

  3.缓存的并发控制,增删改查在多线程的环境下需要考虑。ConcurrentHashMap和Collections.synchronizedMap(Map)

    java.lang包默认会导入到每个Java文件中,所以lang包下的类默认都可以直接使用。

    rt.jar包也会自动加载,jre/lib下的jar包也会自动加载。

  4.java的修饰符

   类的修饰符有:

访问修饰符

名称

说明

备注

public

可以被所有类访问(使用)

public类必须定义在和类名相同的同名文件中

package

可以被同一个包中的类访问(使用)

默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中

private

修饰内部类

 

修饰符

名称

说明

备注

final

使用此修饰符的类不能够被继承

 

abstract

如果要使用abstract类,之前必须首先建一个继承abstract类的新类,新类中实现abstract类中的抽象方法。

类只要有一个abstract方法,类就必须定义为abstract,但abstract类不一定非要保护abstract方法不可

  变量的修饰符有:

  

访问修饰符

名称

说明

备注

public

可以被任何类访问

 

protected

可以被同一包中的所有类访问

可以被所有子类访问

子类没有在同一包中也可以访问

private

只能够被当前类的方法访问

 

缺省

无访问修饰符

可以被同一包中的所有类访问

如果子类没有在同一个包中,也不能访问

修饰符

名称

说明

备注

static

静态变量(又称为类变量,其它的称为实例变量)

可以被类的所有实例共享。

并不需要创建类的实例就可以访问静态变量

final

常量,值只能够分配一次,不能更改

注意不要使用const,虽然它和C、C++中的const关键字含义一样

可以同static一起使用,避免对类的每个实例维护一个拷贝

transient

告诉编译器,在类对象序列化的时候,此变量不需要持久保存

主要是因为改变量可以通过其它变量来得到,使用它是为了性能的问题

volatile

指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确的处理

 

  方法的修饰符有:

  

访问修饰符

名称

说明

备注

public

可以从所有类访问

 

protected

可以被同一包中的所有类访问

可以被所有子类访问

子类没有在同一包中也可以访问

private

只能够被当前类的方法访问

 

缺省

无访问修饰符

可以被同一包中的所有类访问

如果子类没有在同一个包中,也不能访问

修饰符

名称

说明

备注

static

静态方法(又称为类方法,其它的称为实例方法)

提供不依赖于类实例的服务

并不需要创建类的实例就可以访问静态方法

final

防止任何子类重载该方法

注意不要使用const,虽然它和C、C++中的const关键字含义一样

可以同static一起使用,避免对类的每个实例维护一个拷贝

abstract

抽象方法,类中已声明而没有实现的方法

不能将static方法、final方法或者类的构造器方法声明为abstract

native

用该修饰符定义的方法在类中没有实现,而大多数情况下该方法的实现是用C、C++编写的。

参见Sun的Java Native接口(JNI),JNI提供了运行时加载一个native方法的实现,并将其于一个Java类关联的功能

synchronized

多线程的支持

当一个方法被调用时,没有其它线程能够调用该方法,其它的synchronized方法也不能调用该方法,直到该方法返回

  接口的修饰符:

  

访问修饰符

名称

说明

备注

public

所有

 

无访问修饰符(默认)

同一个包内

 

  javadoc只能为public和protected成员进行注释,private和包成员的注释将会被忽略掉。

  5.静态导入

  静态导入的语法是:

  import static 包名.类名.静态成员变量;

  import static 包名.类名.静态成员函数;  

package com.example.learnjava;

public class Common{

    public static final int AGE = 10;
public static void output() {
System.out.println("Hello World!");
}
}

  使用静态导入:

package com.example.learnjava2;

import static com.example.learnjava.Common.AGE;
import static com.example.learnjava.Common.output; public class StaticImportTest{
public static void main(String[] args){
int a = AGE;
System.out.println(a); output();
}
}

    

  程序员经常会忘记运算符的优先级顺序,这时使用括号来明确地定义运算顺序是最保险的。

 6. Math的常用函数

  整数除法的结果并不是四舍五入,而是直接去掉小数部分,这点需要注意。如果需要保留小数,转换为float或double型。

  Math.floor 返回小的整数值      System.out.println(Math.floor(10.7));   //10.0

  Math.round  则是4舍5入的计算,入的时候是到大于它的整数
  round 返回大的整数值,Math.round(-11.5)的结果为-11。

  abs求绝对值, System.out.println(Math.abs(-10.4));    //10.4

  max 两个中返回大的值,min和它相反

  random 取得一个大于或者等于0.0小于不等于1.0的随机数

  

  也可通过Random类生成随机的数, 下面的代码将生成0到100的随机整数。47是给定了一个生成器的种子,如果不给定,将使用当前时间作为种子。还可以使用nextFloat、nextLong等。 

Random rand = new Random(47);
int i = rand,netInt(100);

  ceil 则是不小于他的最小整数

  7.Java中的移位操作 

  java中的移位操作只对int和long有效,byte、short、char升级为int后再进行移位,其结果可能就是不准确的。 

  >>是带符号右移,负数高位补1,正数补0

  <<左移不管负数还是正数,在低位永远补0

  >>>是不带符号右移,不论负数还是正数,高位补0

  没有<<<符号

    a = 1;

    a = a >> 2;的结果将是4.

 8.Java中标签的使用

  Java中使用标签的唯一理由就是想要从多重循环中直接跳到某处,和continue和break结合使用

foo:
for(int x=3;x<20;x++){
while(y>7){
y--;
  continue;
}
}

  该continue只能跳出while这个内层循环

foo:
for(int x=3;x<20;x++){
while(y>7){
y--;
continue foo;
}
}

  该continue可以直接跳至foo标签处,可以跳出多重循环。

  

  上面的foo:就是标签,标签可以任意命名,如labeloutter:也是可以的。

  使用标签和continue和break结合使用可以完成goto的功能。

  while(true)和for(;;)的作用是一样的。

 9.switch的使用

  在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,呼吁很久的String支持也终于被加上了。

public class Test {

    public void test(String str) {
switch(str) {
case "abc":
System.out.println("abc");
break;
case "def":
System.out.println("def");
break;
default:
System.out.println("default");
}
} }

    在switch语句中,String的比较用的是String.equals,因此大家可以放心的使用。

  需要注意的是,传给switch的String变量不能为null,同时switch的case子句中使用的字符串也不能为null。

  使用枚举值的情形:

package com.hap.code.utils;

public enum TemplateType {
Single,Manager,Tree,TreeManager
}

  

package com.hap.code;

import java.io.Serializable;

import com.hap.code.utils.TemplateType;

public class CodeFactory {
public void generateCode(TemplateType templateType,Class<Serializable>... cls) {
switch (templateType) {
case Single:
break;
default:
break;
}
}
}

  break是可以省略的,若省略break,继续执行下面的case,直至下一个break为止。default后面也可以加一个break,但是没什么实际意义。

  

《Thinking in Java》学习笔记(一)的更多相关文章

  1. 《Hadoop》大数据技术开发实战学习笔记(二)

    搭建Hadoop 2.x分布式集群 1.Hadoop集群角色分配 2.上传Hadoop并解压 在centos01中,将安装文件上传到/opt/softwares/目录,然后解压安装文件到/opt/mo ...

  2. 《Hadoop大数据技术开发实战》学习笔记(一)

    基于CentOS7系统 新建用户 1.使用"su-"命令切换到root用户,然后执行命令: adduser zonkidd 2.执行以下命令,设置用户zonkidd的密码: pas ...

  3. 超人学院Hadoop大数据技术资源分享

    超人学院Hadoop大数据技术资源分享 http://bbs.superwu.cn/forum.php?mod=viewthread&tid=807&fromuid=645 很多其它精 ...

  4. java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式

    Hadoop简介和安装及伪分布式 大数据概念 大数据概论 大数据(Big Data): 指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发 ...

  5. hadoop大数据技术架构详解

    大数据的时代已经来了,信息的爆炸式增长使得越来越多的行业面临这大量数据需要存储和分析的挑战.Hadoop作为一个开源的分布式并行处理平台,以其高拓展.高效率.高可靠等优点越来越受到欢迎.这同时也带动了 ...

  6. 除Hadoop大数据技术外,还需了解的九大技术

    除Hadoop外的9个大数据技术: 1.Apache Flink 2.Apache Samza 3.Google Cloud Data Flow 4.StreamSets 5.Tensor Flow ...

  7. 大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(重点)

    第1章 Flume概述1.1 Flume定义1.2 Flume组成架构1.2.1 Agent1.2.2 Source1.2.3 Channel1.2.4 Sink1.2.5 Event1.3 Flum ...

  8. 大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序

    第1章 Spark 概述1.1 什么是 Spark1.2 Spark 特点1.3 Spark 的用户和用途第2章 Spark 集群安装2.1 集群角色2.2 机器准备2.3 下载 Spark 安装包2 ...

  9. 大数据技术之_16_Scala学习_01_Scala 语言概述

    第一章 Scala 语言概述1.1 why is Scala 语言?1.2 Scala 语言诞生小故事1.3 Scala 和 Java 以及 jvm 的关系分析图1.4 Scala 语言的特点1.5 ...

  10. 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...

随机推荐

  1. HDU 1232 并查集

    畅通工程                                                                                            Time ...

  2. 简单的面向对象(OO)练习

    学生设备管理系统: 每个学校都有很多班级,每个班级都有很多设备.(设备可以更新)每个设备都有购买价格,每种设备都有折旧率(如每年折旧10%) 按班级进行统计,指定的班级有多少的设数量? 按班级进行统计 ...

  3. js onclick传递 对象

    在html onclick中如果参数直接传递一个参数js会报错. 如果想要onclick传递参数需要这么做: var user = {id:1, name:'hk'}; var ele = '< ...

  4. volatile 与 synchronized 区别

    在Java中,为了保证多线程读写数据时保证数据的一致性,可以采用两种方式: 同步 如用synchronized关键字,或者使用锁对象. volatile 使用volatile关键字用一句话概括vola ...

  5. Spider_Man_3 の selenium

    一:介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...

  6. Lnmp修改php.ini配置

    http://www.chenruixuan.com/archives/341.html A-A+ 陈瑞轩2014年5月8日07102 次浏览PHP | 工作 要在lnmp系统里面修改php.ini配 ...

  7. url加密,一般只对参数加密

    首先,很不推荐你使用get方式发送密码,最好是使用post. 原因是,你通过一个连接把用户名和密码发送到后台,即便密码不是明文,别人获取不到密码明文,但是,只要你这个连接成功登陆过,别人就可以拿这个连 ...

  8. eclipse中git解决冲突

    摘录自http://blog.csdn.net/rosten/article/details/17068285 1. 工程->Team->同步 2.从远程pull至本地,就会出现如下内容 ...

  9. 【js 实践】js 实现木桶布局

    还有两个月左右就要准备实习了,所以特意练一练,今天终于搞定了js 的木桶布局了 这一个是按照一个插件的规格去写的以防以后工作需要,详细的解释在前端网这里 http://www.qdfuns.com/n ...

  10. Abp.NHibernate连接PostgreSQl数据库

    Abp.NHibernate动态库连接PostgreSQl数据库 初次接触Abp框架,其框架中封装的操作各类数据的方法还是很好用的,本人还在进一步的学习当中,并将利用abp.NHibernate类库操 ...