J2EE04——数据类型

1. 数据类型结构

            java是一门强调类型的语言,所以数据类型对java来说是一个很重要的概念。


2. 基本数据类型

2.1 基本类型定义
    tips:数字默认为int,浮点默认为float。
    tips:float类型的变量值后必须跟F或f,而long类型的变量值后建议跟l或者L。
    tips:ascii – gbk(国标码) – 每个国家都出现了自己的编码 – unicode(万国码标准) --utf-8(可变长字符集)

八大基本数据类型声明赋值测试代码

2.2 数据类型的转换
    八大基本数据类型之间(除了boolean)是可以互相转换的。
2.2.1 转换的原则
    由小到大自动转,由大到小需强转!
2.2.2 强转的格式
    如:像将A转为B,则可以写:" (B)A;"


3. 引用数据类型

    除了基本数据类型之外,都是引用数据类型,包括类、数组、接口等等。
3.1 引用数据类型的声明赋值
    基本数据类型的声明和赋值:三要素结构:变量类型 变量名 = 变量值;
引用数据类型的声明和赋值:变量类型 变量名 = new 构造函数();
3.2 最常用的引用数据类型String
    String类是常使用的引用数据类型,值为字符串;
3.3 String的声明方式
    3.3.1 常规写法
        变量类型 变量名 = new 类型构造方法 (”变量值”);
    3.3.2 简洁写法
这种写法是String的特权,其他类不通用。
3.4 应用程序文档
API(Application Programming Interface)就是应用程序编程接口。
官方释意:API指的是一些预先定义的函数,目的是提供应用程序与开发人员基于某软 件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
习惯性翻阅API文档来学习一个类,是一个程序神的必备技能。
3.5 String的常用方法
翻阅API学习String方法。
    学习方法的时候,我们应该关注的重点是
    1.关注方法的用途:这个必须记住,否则就跟没学一样。
    2.关注方法的名字:代码需要使用名字去调用它,但是不需要记忆。
    3.关注方法的传入参数:要求传入什么类型的变量,就传入什么类型的变量,不需要 记忆。
    4.关注方法的返回值:有返回值就用一个对应类型的变量去接收它的返回值,不需要 记忆。


4. 内存分布

4.1 概念
     在JVM内存中,存有三个区域,分别为栈(stack)、堆(heap)和池(pool)
4.2 理解
     如果把内存比作一个"小区",那么,栈就是这个小区的"物业小屋",虽然空间小,功能 单一,但是访问很方便!堆就是这个小区的"住宅区域",虽然空间大,功能丰富,但是访问 很麻烦!池就是这个小区的"公共水池",大家谁都可以用,而且只存在一个!
4.3 不同数据类型的内存分布
     基本数据类型,因为特别常用,经常访问,并且体积小不占空间,所以全都在栈内存 中存放。
     引用数据类型,因为功能丰富,并且体积庞大,所以引用数据类型的值,要放在堆内 存中,但是内存地址还是放在栈内存中(内存地址也叫句柄,就像居民楼的门牌号,全部登 记在物业,这样当我去找张三的时候,只需要去栈中查找张三家的门牌号就可以直接找到他 家,并不需要去一个门一个门去敲问);
4.4 基本和引用的比较
     1. 基本数据类型只有8个,引用数据类型有很多个,就像我们写的HelloWorld类就是 一个引用数据类型;
     2. 声明一个基本数据类型时会将名值捆绑存放在栈内存中,而声明一个引用数据类型 时,只会将自己的句柄或叫“内存地址”存放在栈中,而值一般都放在堆中(使用new关键 字进行开辟);
     3. 基本数据类型使用频繁, 存取快,但是功能少,而且不附带任何使用方法,而引用 数据类型,虽然使用起来比较麻烦,也比较占内存,但是功能多,每个引用数据类型都自带 许多的方法供我们使用。


5. String池

    凡是被双引号引起来的值都会先去String池中查找,如果存在就拿出来直接使用。如果 不存在就将它放入到池中,然后再使用。


6. 包装类

    八个基本数据类型都有相对应的引用数据类型:叫做包装类。
6.1 装箱和拆箱
    基本数据类型变成引用数据类型叫做装箱;引用数据类型变成基本数据类型叫做拆 箱。
6.2 代码重用池
    数值在[-128,127]之间,返回指向IntegerCache.cache中已经存在的对象的引用, 即-128到127的数据,都在代码重用池中存放,在使用的时候,会直接从池中获取。

7. 正则表达式

7.1 概念
    正则表达式是对字符串操作的一种逻辑公式,是用事先定义好的一些特定字符、及这些 特定字符的组合,组成的一个“规则字符串”,用来表达对字符串的一种过滤逻辑。 我们可以想象它是一个字符串格式模板。
7.2 正则的优点
    灵活性、逻辑性和功能性非常的强,可以迅速地用极简单的方式达到字符串的复杂控制
7.3 使用方法
    7.3.1 先制造一个正则模版
    7.3.2 使用指定字符串匹配这个模版
7.4 模版查询手册

字符描述
*匹配前面的子表达式零次或多次。例如,zo*能匹配“z"以及"zoo"。*等价于{0,}。
+匹配前面的子表达式一次或多次。例如,“zo+“能匹配"zo"以及"zoo”,但不能匹 配"z"。+等价于{1,}。
?匹配前面的子表达式零次或一次。例如,“do(es)?“可以匹配"does"或"does"中 的"do”。?等价于{0,1}。
{n}n是一个非负整数。匹配确定的n次。例如,“o{2}“不能匹配"Bob"中的"o”,但是 能匹配"food"中的两个o。
{n,}n是一个非负整数。至少匹配n次。例如,“o{2,}“不能匹配"Bob"中的"o”,但能匹 配"foooood"中的所有o。"o{1,}“等价于"o+”。"o{0,}“则等价于"o*”。
.匹配除“\n"之外的任何单个字符。要匹配包括"\n"在内的任何字符,请使用像" (.
x/y匹配x或y。例如,“z
[^xyz]负值字符集合。匹配未包含的任意字符。例如,“[^abc]“可以匹配"plain"中 的"p”。
[a-z]字符范围。匹配指定范围内的任意字符。例如,“[a-z]"可以匹配"a"到"z"范围内的 任意小写字母字符。
[^a-z]负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]"可以匹配任 何不在"a"到"z"范围内的任意字符

7.5 常用正则查询

用户名[a-z0-9_-]{3,16}$/
密码[a-z0-9_-]{6,18}$
密码2(?=^.{8,}KaTeX parse error: Expected 'EOF', got '\d' at position 7: )(?=.*\̲d̲)(?=.*\W+)(?=.*… (由数字/大写字母/小写字母/标点符号组成,四种都 必有,8位以上)
十六进制值^#?([a-f0-9]{6}
电子邮箱/^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})KaTeX parse error: Expected 'EOF', got '\d' at position 9: / /^[a-z\̲d̲]+(\.[a-z\d]+)*…/或\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
URL^(https??/)?([\da-z.-]+).([a-z.]{2,6})([/\w .-])/?$/ 或 [a-zA-z]+://[^\s]*

8. StringBuilder&StringBuffer

一个String对象的长度和内容都是不可变的,虽然使用“+”可以达到改变内容的目 的,但实质上是产生了一个新的String代替之前的String,如果这种改变很频繁,那么就不 建议使用”+”,而是使用StringBuffer或StringBuilder类来操作。
          测试StringBuilder和String在追加字符串时的效率比较。
// 当前系统时间距离1970年的毫秒数
long startTimes = System.currentTimeMillis();
String str = “0”;
for(int i=0;i<200000;i++){
str+=“0”;
}
long endTimes = System.currentTimeMillis();
System.out.println(endTimes-startTimes);
// 解决办法
long startTimes1 = System.currentTimeMillis();
StringBuilder sb = new StringBuilder(“0”);
for(int i=0;i<100000000;i++){
sb.append(“0”);
}

总结

1. StringBuilder和String的区别
String不可变长,StringBuilder可变变长。

2. StringBuilder和StringBuffer的区别
StringBuilder更快,StringBuilder更新,一个线程安全,一个线程不安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值