JAVA基础类库(第四周)(三只松鼠,奥利给)
目录
1.包装类基本知识
2.自动装箱和拆箱
4.包装类时空指针异常的情况
5.包装类时的缓存数组
注:JAVA里的源代码查看可以通过鼠标放在需要查看的源代码上然后在左下角找到第一个光标就是源代码查看方法。
6.String类,StringBuffer类和StringBuilder类
7.Math类
8.Random类(比Math中的随机数方法提供了更多形式生成随机数的方法)
1.包装类基本知识
JAVA是面向对象的语言,但不是纯面向对象的语言,很多经常用到的基本数据类型就不是对象,但我们需要将基本数据转化为对象,以便于操作,为了解决这一问题,JAVA在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样的八个和基本数据类型对应的类称为包装类。
基本数据类型 | 包装类 |
int | Integer |
char | Character |
float | Float |
double | Double |
byte | Byte |
long | Long |
short | Short |
boolean | Boolean |
基本类中有基本构造方法,以Integer为例:
Integer(int value)构造一个新分配的Integer对象,他表示指定的int值
Integer(String s)构造一个新分配的Integer对象,他表示String参数所指的int值
基本类中有一些常用方法:如下所示
package www.azhe.com;public class TestWrapper {public static void main(String[] args) {// TODO Auto-generated method stub
Integer a=new Integer (3);
Integer b=Integer.valueOf(30);
int c=a.intValue();
System.out.print(c);}}
下图为运行结果:
其他一些方法类似:
2.自动装箱和拆箱
1.自动装箱:
Integer i=100//自动装箱
//编译器自动调用下面语法来编译:
Integer i=Integer.valueOf(100)//使用的是valueOf(100),而不是new Integer(100)
自动拆箱:
Integer i=100;int j=i;//自动拆箱
//相当于调用以下语法编译
int j =i.intvalue();
4.包装类时空指针异常的情况
若包装类时出现空对象,就会出现异常,如下图所示,需要将null空指针情况排除,才能正常运行。
5.包装类时的缓存数组
创建包装类时系统会自动创建一个缓存数组
,创建一个[-128,127]之间的一个缓存数组,当调用valueOf()时,首先会检查是否位于[-128,127]之间,如果是在这个区间,就会使用这个包装类,否则会新建一个Integer包装类,我们可以查看JAVA的源代码,发现该缓存数组如下。
注:JAVA里的源代码查看可以通过鼠标放在需要查看的源代码上然后在左下角找到第一个光标就是源代码查看方法。
下面通过==证明两个对象是否同一对象,如下所示:
6.String类,StringBuffer类和StringBuilder类
1.String类
以下给出所有String类方法
下面给出部分示例:
1.字符串长度
String s = "世界nihao";
int n = s.length();
注意:
中文字符和英文字符都只占1个字符,与c++不同。
2. 空字符串:长度为0的字符串
String s = "";
int n = s.length();
注意:
空字符串和null是两回事。空字符串是一个正常的字符串对象,null不指向任何对象。
3.查找 indexOf
如果有这个子串,则返回位置索引;否则返回-1
String s = "I love xxx";int pos = s.indexOf("love");if(pos ==-1){System.out.println("wwrong");}
默认 indexOf() 从开头开始查找
int p = str.indexOf (“love”);
实际上,也可以指定从第几个字符开始查找
int p = str.indexOf(“love”, 2);
参数从index=2位置往后查找
4.字符串去空格trim()
trim()可以去掉字符串两端的空格
但内部的空格无法删除
5.字符串拆分split()
空格内表示遇到该符号将进行拆分,拆分的数据讲义字符串数组的形式返回。
String s ="小张/小王/小李";
String[] names = s.split("/");
for(int i=0; i<names.length; i++)
{
String name = names[i].trim();
System.out.println(name);
}
6.按字典顺序比较大小
String s1 = "wanzgherongyao";String s2 = "yingxionglianmeng"; if( s1.compareTo( s2 ) < 0)System.out.println(s1 + "在前");else System.out.println(s2 + "在前");
如果忽略字母的大小写的话,用compareToIgnoreCase()
String s1 = "WangZherongyao";String s2 = "YingxionglianMENG"; if( s1.compareTognoreCase( s2 ) < 0)System.out.println(s1 + "在前");else System.out.println(s2 + "在前");
2.首先,StringBuilder类和StringBuffer类都是可变字符序列,但Builder线程不安全的,Buffer是线程安全的,因此Builder效率更高。
StringBuffer append(String str) | 向StringBuffer追加内容str |
StringBuffer append(StringBuffer sb) | 向StringBuffer追加StringBuffer的内容 |
StringBuffer append(char c) | 向StringBuffer追加c |
StringBuffer delete (int start,int end) | 删除指定范围的字符串 |
StringBuffer insert(int offset,String str) | 在指定位置加上指定字符串,可连续插入 |
StringBuffer reverse() | 将字符串倒置输出 |
StringBuffer setCharAt(int offset ,String str) | 在指定位置插入指定字符串,不可连续插入 |
1.append方法
注:重点关注StringBuffer的append函数,效率要远远高于利用"+"来链接字符串,尤其在使用循环时
下面给出两种写法的示例:
一旦循环次数高起来,使用“+”,会导致系统崩溃,主要原因在于,工程建立后,大量用户调用该函数,同时进行多次该循环,耗费大量内存导致系统崩溃,而append在使用时不会创建内存,非常实用而且效率很高。
2.reverse方法
如程序运行所示,reverse将序列倒置。
3.delete方法,insert方法以及setCharAt方法的使用
注:insert方法在调用时会自动返回该类,原因是源代码中有return函数,因此在后面继续加.,可以连续调用。
7.Math类
基本和c++类似
几个常用方法如下所示:
Math类是一个工具类,主要用于完成复杂的数学运算,如求绝对值、三角函数、指数运算等。
由于Math类的构造方法被定义成private,因此无法创建Math类的对象。
Math类中的所有方法都是静态方法,可以直接通过类名来调用它们。
除静态方法外,Math类中还有两个静态常量PI和E,分别代表数学中的π和e
package com.azhe.www;public class MathTest {public static void main(String[] args) {System.out.println("计算绝对值:"+Math.abs(-4));//double,float,int,longSystem.out.println("计算正弦值:"+Math.sin(1.57));//doubleSystem.out.println("计算余弦值:"+Math.cos(2.0));//doubleSystem.out.println("计算正切值:"+Math.tan(0.8));//doubleSystem.out.println("计算平方根:"+Math.sqrt(4));//doubleSystem.out.println("计算立方根:"+Math.cbrt(27));//doubleSystem.out.println("计算乘方:"+Math.pow(2, 3));//2的3次方System.out.println("求大于参数的最小整数:"+Math.ceil(4.6));//doubleSystem.out.println("求小于参数的最大整数:"+Math.floor(-5.2));//doubleSystem.out.println("对小数进行四舍五入:"+Math.round(-8.6));//double,floatSystem.out.println("求两个数的较大值:"+Math.max(5.1, 5.7));//double,float,int,longSystem.out.println("求两个数的较小值:"+Math.min(3, 8.4));//double,float,int,longSystem.out.println("生成一个大于等于0.0小于1.0的随机数:"+Math.random());}
}
程序运行如下所示:
8.Random类(比Math中的随机数方法提供了更多形式生成随机数的方法)
如下是常用的Random方法的使用
下面给出具体代码使用Random方法:
package www。azhe。com;
import java.util.Random; // 这一行import不能少!
public class TestRandom
{public static void main(String[] args){Random rand = new Random(); for(int i=0; i< 3; i++){int s = rand.nextInt(1000); //表示生成从0(包括)到1000(不包括)的随机数System.out.println("生成随机数: " + s);}}
}
JAVA基础类库(第四周)(三只松鼠,奥利给)相关推荐
- Java面试题系列之Java基础类库(一)
Java程序员面试题大全系列之Java基础类库(一) ...
- 【Java程序设计】Java基础类库简介
Java基础类库简介 文章目录 Java基础类库简介 一.Java基础类库介绍 二.语言包(java.lang) (1)数据类型包裹类 1.生成数据类型包裹类对象的方法 2.得到基本数据类型数据的方法 ...
- javaSE——Java基础类库
一.Java基础类库 Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. 1.Java.lang包 Java最 ...
- 《疯狂Java讲义》读书笔记(四):Java基础类库
第七章 Java基础类库 ①使用Scanner获取键盘输入:Scanner类提供了多个构造器,不同构造器可以接收文件.输入流.字符串作为数据源,主要提供了2个方法:hasNextXXX()是否还有下一 ...
- 第七章 Java基础类库
前言:如果你真正学习到了这里,那么先容许我夸赞一下你,太棒了!哪怕你对前面六篇文章的掌握度达到50%也是非常了不起的了,关于后面的文章学习我只能说,非常简单,只是我们文章会非常详细的介绍实现原理和一些 ...
- Java基础类库笔记
基础类库 概念: java大师为了提高程序员的开发效率 在jre中定义的一个类库 学习方法: 1:学会使用api 2:反复多做每个类的练习题 3:熟悉每个类的作用+常用方法 api applicati ...
- [JAVA基础类库] String类 ○ StringBuffer类 ○ StringBuilder类
引言 字符串就是一连串的字符序列,Java提供了String.StringBuffer和StringBuilder三个类来封装对字符串,并提供了系列方法来操作字符串对象. String类是不可变类的: ...
- [JAVA基础类库] Objec类
引言 Object类是所有类.数组的父类,位于java.lang 包下也就是说,Java允许把所有任何类型的对象赋给Object类型的变量.当定义一个类时没有使用extends关键字为它显式指定父类, ...
- java基础类库——java数据库编程,JDBC连接(原生数据库连接)(十)
java数据库编程,JDBC连接(原生数据库连接) JDBC严格来讲不属于一门技术,它属于一种服务.所有的操作流程都是固定的.JDBC是java提供的数据库操作的一个标准(它就是一组相关的标准接口), ...
最新文章
- 集合框架知识系列05 HashMap的源码分析和使用示例
- 下排牙齿中间高两边低_不知道如何添加辅食?让宝宝牙齿数量来帮你忙(附食谱)...
- Linux系统查看位数和内存
- Ubuntu gnome 14.10下MySQLdb安装
- Spring集成–强大的拆分器聚合器
- python -m xxx.py和python xxx.py的区别
- 用javascript生成指定范围的随机数
- RuoYi-Cloud 部署篇_02(linux环境 mysql+nginx版本)
- PTA数据结构期末练习 - 单选题、判断题
- (15)VHDL测试激励编写(复位)
- arduino nano 蓝牙_贸泽开售结合蓝牙5.2与USB 2.0的 Nordic Semiconductor nRF52820多协议SoC...
- maven常见问题归纳
- centos7启动root账户_新手小白使用vm安装Linux系统centos7虚拟机详细教程
- spring RedisTemplate 缓存
- c++ 深度拷贝和浅度拷贝
- error LNK2019: 无法解析的外部符号 _WinMain@16
- Socks5协议中文文档
- 详解数据模型:概念模型、逻辑模型、物理模型
- apache OpenNLP简要介绍
- ICLR 2020 图神经学习论文汇总
热门文章
- 实验3-11 计算油费(15分)
- flink Spark 和 Flink对比
- 笔记:黑马React教程
- matlab 风电厂模板解释,基于MATLAB的风电场建模仿真研究牛步柯(原稿)
- jQuery EasyUI/TopJUI基本的数字输入框(保留两位小数,带前缀后缀...)
- hduoj 2024
- 2021-03-30学习日志
- linux 汇编 cmp,使用汇编语言编写C程序的函数
- 学习一个月web开发的成果,服务器C++,数据库postgresql简易的知识分享平台
- Matlab生成Word文件(含表格和图片插入)