一、Java API

Java API即Java应用程序编程接口,他是运行库的集合,预先定义了一些接口和类,程序员可以直接调用;此外也特指API的说明文档,也称帮助文档。

Java中常用的包:

java.lang:使用最广泛,自动导入到所有的程序中,包含Jav程序的基础类和接口。如包装类、Math类、String类等,此包还提供用于管理类的动态加载、外部进程创建、主机环境查询和安全侧率实施等“系统操作”的类;

java.util:包含了系统辅助类,特别是Collections、List和Map等集合类;

java.io:包含了与输入/输出有关的类,如文件操作类;

java.net:包含了与网络有关的类,如Socket、ServerSocket等;

java.sql:包含了与数据库相关的类,如Connection、Statement等类

二、枚举

1.枚举概述

从Java SE 5.0开始,Java程序设计语言引入了一种新的类型---枚举(Enum)。

枚举是指由一组固定的常量组成的类型,使用关键字enum来定义。

定义语法:

[访问修饰符]  enum  enumName{

enumContantName1 , enumContantName2 ,... , [ ;] ]     //枚举常量列表,若除了枚举常量还定义了其他成员,则枚举常量列表需要以“;”结尾

//[field, method]    //其他的成员,包括构造方法,置于枚举常量之后

}

例如:定义表示性别的枚举,两个枚举常量分别代表男和女

public enum Genders{

Male,Female

}

注意:枚举其实是一种类型,是java.lang.Enum的子类,继承了Enum类的许多有用的方法(可以查看API)。

2.使用枚举实现每周日程信息

在java中,通常使用枚举表示一组个数有限的值,用于实现对输入的值进行约束和检查。

package cn.UtilTest;

//一周日程信息类

public class WeekThings {

//定义枚举

public enum Week{

MON,TUE,WED,THU,FRI,SAT,SUN

}

/*

* 查看日程安排

* @param day 星期几

*/

public void doWhat(Week day){

switch (day){

case MON:

case TUE:

case WED:

case THU:

case FRI:

System.out.println("工作日,努力写代码!");

break;

case SAT:

System.out.println("星期六,吃饭休息、看电影");

break;

case SUN:

System.out.println("星期日,休息、打篮球!");

break;

default:

System.out.println("地球上一周就7天!");

}

}

public static void main(String[] args) {

WeekThings weekThings = new WeekThings();

weekThings.doWhat(Week.SAT);

Week week = Week.WED;

weekThings.doWhat(week);

}

}

3.使用枚举的优点:

使戴安更易于维护,有助于确保为变量指定合法的、期望的值;

更易于编程时输入,使用枚举 赋值,只需要输入枚举名,冉虎输入一个点(.),就能将所有的值显示出来;

使代码更清晰,允许用描述性的名称表示数据,使用时直观方便;

三、包装类

1.包装类概述

Java是面向对象的,但是Java中的基本数据类型却不是面向对象的,未解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类,成为包装类。

包装类均位于java.lang包中,包装类和基本数据类型的对应关系如下:

包装类的作用主要有2个:

包装类作为和基本数据类型对应的类存在,方便对象的操作;

包装类包含每种基本数据类型的相关属性和操作方法;

2.包装类和基本数据类型的转换

由于八个包装类的使用比较类似,下面以最常用的Integer类为例子介绍包装类的实际使用。Integer类继承Number父类。

1)基于基本数据类型创建包装类对象通常有2种方式:

public Type(type value)

public Type(Stirng value)

如:Integer  intValue = new Integer(21);    Integer  intValue = new Integer("21");

注意:不能使用第二种形式的构造方法创建Character类型的包装类对象,只能是:Character charValue = new Character('x');这种形式

ackage cn.com.yu;

public class Demo {

public static void main(String[] args) {

//所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例

Integer i=new Integer(34);

Double d=new Double(98.7);

Boolean b=new Boolean(true);

Character c=new Character('a');

System.out.println(i+"\t"+d+"\t"+b+"\t"+c);

//除Character类外,其他包装类可以一个字符串为参数构造它们的实例

//编译错误

//Character c2=new Character("a");

Integer i2=new Integer("34");

Double d2=new Double("98.7");

Boolean b2=new Boolean("true");

System.out.println(i2+"\t"+d2+"\t"+b2);

//Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false

Boolean b3=new Boolean("TRue");

Boolean b4=new Boolean("false");

Boolean b5=new Boolean("love");

System.out.println(b3+"\t"+b4+"\t"+b5);

//当包装类构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译通过,运行时NumberFormatException异常

//Integer i3=new Integer(null);

//Double d4=new Double("包装类");

//System.out.println(i3+"\t"+d4);

}

}

3.包装类常用方法

包装类一般包含静态的重载的valueOf()方法,可以接受基本数据类型数据和字符串作为参数并返回包装类的对象;

注意:Character的valueOf()方法只有一种定义,valueOf(char  c),返回一个指定char值的Character对象

package cn.com.yu;

/**

* 包装类常用方法

* */

public class Demo {

public static void main(String[] args){

//XXXValue():包装类转换成基本类型

Integer integerId=new Integer(25);

int intId=integerId.intValue();

System.out.println(intId);

Boolean booleanVal=new Boolean(true);

boolean bool2=booleanVal.booleanValue();

System.out.println(bool2);

System.out.println("*************************");

//toString():以字符串形式返回包装对象表示的基本类型数据

String sex=Character.toString('男');

String id=Integer.toString(89);

System.out.println(sex);

System.out.println(id);

String sex2='男'+"";

String id2=89+"";

System.out.println(sex2);

System.out.println(id2);

System.out.println("*************************");

//所有包装类valueOf(type value)

Integer intValue=Integer.valueOf(21);

System.out.println(intValue);

Boolean bool=Boolean.valueOf(false);

System.out.println(bool);

System.out.println("*************************");

//除Character类外,其他包装类valueOf(String s)

intValue=Integer.valueOf("32");

//bool=Boolean.valueOf("true");

bool=Boolean.valueOf("love");

//编译错误,应该是valueOf('a')

//Character c=Character.valueOf("a");

System.out.println(intValue);

System.out.println(bool);

System.out.println("*************************");

//parseXXX():把字符串转换为相应的基本数据类型数据(Character除外)

int i=Integer.parseInt("89");

System.out.println(i);

//boolean flag=Boolean.parseBoolean("true");

//boolean flag=Boolean.parseBoolean("TRue");

//boolean flag=Boolean.parseBoolean("love");

boolean flag=Boolean.parseBoolean("false");

System.out.println(flag);

System.out.println("*************************");

//基本类型和包装类的自动转换:装箱和拆箱

//装箱

Integer intObject=5;

//拆箱

int intValue2=intObject;

System.out.println(intObject+"\t"+intValue2);

}

}

4.自动装箱和自动拆箱(auto-boxing & auto-unboxing)

JDK5.0的一个新特性是自动装箱和自动拆箱。

自动装箱:基本类型自动转为包装类(int >> Integer)

如:Integer i = 100;

★本质上是编译器编译时自动添加:Integer i = new Integer(100);

自动拆箱:包装类自动转为基本类型(Integer >> int)

如:int a = new Integer(100);

★本质是上是编译器编译时自动添加:int a = new Integer(100).intValue();

package cn.UtilTest;

import java.util.*;

public class BoxTest {

public static void main(String[] args) {

Collection c = new ArrayList();

c.add(3);//将int类型的3转换为Integer类型并放到集合当中

}

}

在Integer类中自动装箱和自动拆箱中遇到的问题:

package cn.UtilTest;

import java.util.*;

public class BoxTest {

public static void main(String[] args) {

Integer d = 1234;

Integer d2 = 1234;

//此时d和d2是分别new的2个对象

System.out.println(d==d2);

System.out.println(d.equals(d2));

System.out.println("------------------");

Integer d3 = -100; // [-128,127]之间的数,仍然当做基本数据类型来处理。

Integer d4 = -100;

System.out.println(d3==d4);

System.out.println(d3.equals(d4));

}

}

结果:

Integer包装类的equals()方法源码:

public boolean equals(Object obj) {

if (obj instanceof Integer) {

return value == ((Integer)obj).intValue(); //比较的是其对应的基本数据类型

}

return false;

}

所以用equals()方法返回的是true。

但是用"=="判断时却出现了不同情况。

原因:查看内部实现代码可知,Integer类有一个缓存问题,它会缓存-128~127之间的整数。也就是说如果将-128~127之间的数值赋值给Integer类对象,在比较两个对象(d3==d4)时比较的是两个对象的数值。超过这个范围比较的是对象的内存地址。

5.注意:包装类和基本数据类型的相互转换会增加系统的额外负担,所以包装类只有在基本数据类型需要用对象表示时才用,包装类并不是用来取代基本数据类型的;

java高级特性2_Java高级特性 第2节 java中常用的实用类(1)相关推荐

  1. JAVA、IDEA超级实用快捷键(公司开发项目中常用快捷键)

    今天整理了一些IDEA开发常用的快捷键: 代码格式化:Ctrl + Alt + L 代码自动填写:Alt + Enter 代码提示:Ctrl + Alt + 空格 代码跨选择:Ctrl + Alt 删 ...

  2. java 中常用英语_java中常用英语

    英语|JAVA笔试题常见英语_电子/电路_工程科技_专业资料.Java 笔试题常见英语 What will be the output when you compile and execute the ...

  3. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

    前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开 ...

  4. Java核心技术 卷II 高级特性 原书第9版pdf

    下载地址:网盘下载 内容简介  · · · · · · Java领域最有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与<Java编程思想&g ...

  5. 【Java书笔记】:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》第2部分-自动内存管理,第3部分-虚拟机执行子系统,第5部分-高效并发

    作者:周志明 整理者GitHub:https://github.com/starjuly/UnderstandingTheJVM 第2部分-自动内存管理 第2章 Java内存区域与内存溢出异常 2.2 ...

  6. 最新:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明

    本书一共分为五个部分:走近Java.自动内存管理.虚拟机执行子系统.程序编译与代码优化. 高效并发.各个部分之间基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴 趣的专题开始阅读,但 ...

  7. 读书笔记之《深入理解Java虚拟机:JVM高级特性与最佳实践》

    本篇带来的是周志明老师编写的<深入理解Java虚拟机:JVM高级特性与最佳实践>,十分硬核! 全书共分为 5 部分,围绕内存管理.执行子系统.程序编译与优化.高效并发等核心主题对JVM进行 ...

  8. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记

    前言 我在读 深入理解java虚拟机 这本书,把整体其中的关键点标记了,希望自己对它有个不一样的理解,也希望大家能看看这本写的很好的书 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) pd ...

  9. 新书推荐 | Java核心技术 卷II 高级特性(原书第11版)

    新书推荐 <Java核心技术 卷II 高级特性(原书第11版)> 长按二维码 了解及购买 全新第11版!针对Java SE9.10.11全面更新!Java领域极具影响力和价值的著作之一,与 ...

最新文章

  1. 算法设计与分析第4章 动态规划(一)【背包问题】
  2. 存储ic载板_【热点】深南电路:通讯PCB维持增长 IC载板打造成长新核心
  3. Python:递归输出斐波那契数列
  4. linux bash命令_Ultimate Linux命令行指南-Full Bash教程
  5. 一个长文档里,包括封面、不同的章节,如果我想封面不设置页眉页脚,每个章节的页眉都不同,请问应该如何设置页眉页脚?
  6. one-hot(独热)、bag of word(词袋)、word-Embedding(词嵌入)浅析
  7. c语言中用gaminv,轻松上手游泳模式,用Garmin腕表一定要知道的五件事
  8. 【ZOJ 1964】【尺取】Bound Found【暑期 No.3】
  9. 2017年IT类公司世界500强企业及其简评
  10. 六轴传感器—姿态检测(MPU6050、LSM6DS3)
  11. Linux学习总结(60)——Linux系统常用命令速查手册
  12. DAS Over FC 技术允许 ATTO 分解存储并完成 vSAN 认证套件
  13. C++流操作练习:统计一篇英文(The_Holy_Bible.txt)文章中出现的单词和词频 并组成字典
  14. 微软必应壁纸spotlight锁屏壁纸获取
  15. 苹果Mac电脑开机启动时的声音如何关闭?
  16. Android 签名方法---同时使用V1和V2签名
  17. 主机服务器安全策略(一):账户口令安全
  18. Android手动控制软键盘的开启和关闭,判断软键盘是否显示;
  19. 电路设计基础--三极管驱动直流电机电路
  20. 三种方法助力绝地求生:刺激战场和绝地求生:全军出击快速上分吃鸡

热门文章

  1. 算法提高 金陵十三钗 状态亚索DP
  2. k-d树和基于k-d树的特征点匹配
  3. 东方国信XCloud DB直击“海量数据+多元场景”
  4. 笔记本电脑连接服务器的显示器不亮,笔记本显示器不亮了怎么办 解决方案【详解】...
  5. H5案例:感恩母亲节微信互动小游戏h5模板
  6. mac OX下jenkins安装配置
  7. 一个计算水文质量变化产生的负荷变形的Matlab代码
  8. Python程序退出方式(sys.exit() os._exit() os.kill() os.popen(...))
  9. MySQL安装失败清理以及MySQL卸载全面教程
  10. python的优势有哪些?