前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java学习笔记(二)——基础语法

Java学习笔记(二)——基础语法

作者头像
蛮三刀酱
发布2019-09-10 20:38:51
5480
发布2019-09-10 20:38:51
举报
文章被收录于专栏:蛮三刀的后端开发专栏

本笔记大部分内容来自:微学苑

数据类型以及变量

对于整型数据,通常情况下使用 int 类型。但如果表示投放广岛长崎的原子弹释放出的能量,就需要使用 long 类型了。byte 和 short 类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组。

八进制有一个前缀 0,例如 010 对应十进制中的 8;十六进制有一个前缀 0x,例如 0xCAFE;从 Java 7 开始,可以使用前缀 0b 来表示二进制数据,例如 0b1001 对应十进制中的 9。同样从 Java 7 开始,可以使用下划线来分隔数字,类似英文数字写法,例如 1_000_000 表示 1,000,000,也就是一百万。下划线只是为了让代码更加易读,编译器会删除这些下划线。

float 类型有效数字最长为 7 位,有效数字长度包括了整数部分和小数部分。 double 类型有效数字最长为 15 位。与 float 类型一样,double 后面也带有标志“D”或“d。 注意:不带任何标志的浮点型数据,系统默认是 double 类型。 大多数情况下都是用 double 类型,float 的精度很难满足需求。

print

Java中也有 printf() 语句,用来控制输出格式,不过实际开发中不常用,因为输出到控制台的数据很少要求严格的格式,一般println() 和 print() 就够了。

println() 输出内容后换行,print() 不换行。

数组

定义

Java 中定义数组的语法有两种:

代码语言:javascript
复制
int demoArray[];
int[] demoArray;

type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符 与C、C++不同,Java在定义数组时并不为数组元素分配内存,因此[ ]中无需指定数组元素的个数,即数组长度。而且对于如上定义的一个数组是不能访问它的任何元素的,我们必须要为它分配内存空间,这时要用到运算符new,其格式如下:

代码语言:javascript
复制
    arrayName=new type[arraySize];

通常,

代码语言:javascript
复制
int demoArray[] = new int[3];

初始化

代码语言:javascript
复制
// 静态初始化
// 静态初始化的同时就为数组元素分配空间并赋值
int intArray[] = {1,2,3,4};
String stringArray[] = {"微学苑", "http://www.weixueyuan.net", "一切编程语言都是纸老虎"};
// 动态初始化
float floatArray[] = new float[3];
floatArray[0] = 1.0f;
floatArray[1] = 132.63f;
floatArray[2] = 100F;

遍历

代码语言:javascript
复制
int arrayDemo[] = {1, 2, 4, 7, 9, 192, 100};
for(int i=0,len=arrayDemo.length; i<len; i++){
    System.out.println(arrayDemo[i] + ", ");
} 

增强版Foreach:(类似python中的for x in …:)

代码语言:javascript
复制
int arrayDemo[] = {1, 2, 4, 7, 9, 192, 100};
for(int x: arrayDemo){
    System.out.println(x + ", ");
}

二维数组

Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。

总结

几点说明:

  • 上面讲的是静态数组。静态数组一旦被声明,它的容量就固定了,不容改变。所以在声明数组时,一定要考虑数组的最大容量,防止容量不够的现象。
  • 如果想在运行程序时改变容量,就需要用到数组列表(ArrayList,也称动态数组)或向量(Vector)。
  • 正是由于静态数组容量固定的缺点,实际开发中使用频率不高,被 ArrayList 或 Vector 代替,因为实际开发中经常需要向数组中添加或删除元素,而它的容量不好预估。

String

字符串可以通过“+”连接,基本数据类型与字符串进行“+”操作一般也会自动转换为字符串。

  • length() :返回字符串的长度。无论是字母、数字,还是汉字,每个字符的长度都是1。
  • charAt() :charAt() 方法的作用是按照索引值获得字符串中的指定字符。Java规定,字符串中第一个字符的索引值是0,第二个字符的索引值是1。
  • contains() : contains() 方法用来检测字符串是否包含某个子串
  • replace(): 字符串替换,用来替换字符串中所有指定的子串。注意:replace() 方法不会改变原来的字符串,而是生成一个新的字符串。
  • split():以指定字符串作为分隔符,对当前字符串进行分割,分割的结果是一个数组。
代码语言:javascript
复制
import java.util.*;
public class Demo {
    public static void main(String[] args){
        String str = "wei_xue_yuan_is_good";
        String strArr[] = str.split("_");
        System.out.println(Arrays.toString(strArr));
    }
}

运行结果: [wei, xue, yuan, is, good]

StringBuffer

String 的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低,而且耗费大量内存空间。

StringBuffer类和String类一样,也用来表示字符串,但是StringBuffer的内部实现方式和String不同,在进行字符串处理时,不生成新的对象,在内存使用上要优于String。

StringBuffer 默认分配16字节长度的缓冲区,当字符串超过该大小时,会自动增加缓冲区长度,而不是生成新的对象。

StringBuffer不像String,只能通过 new 来创建对象,不支持简写方式,例如: StringBuffer str1 = new StringBuffer(); // 分配16个字节长度的缓冲区 StringBuffer str2 = =new StringBuffer(512); // 分配512个字节长度的缓冲区 // 在缓冲区中存放了字符串,并在后面预留了16个字节长度的空缓冲区 StringBuffer str3 = new StringBuffer(“www.weixueyuan.net”);

StringBuffer类中的方法主要偏重于对于字符串的操作,例如追加、插入和删除等,这个也是StringBuffer类和String类的主要区别。实际开发中,如果需要对一个字符串进行频繁的修改,建议使用 StringBuffer。

  • append() :append() 方法用于向当前字符串的末尾追加内容,类似于字符串的连接。调用该方法以后,StringBuffer对象的内容也发生改变,例如: StringBuffer str = new StringBuffer(“biancheng100”); str.append(true); 则对象str的值将变成”biancheng100true”。注意是str指向的内容变了,不是str的指向变了。 字符串的”+“操作实际上也是先创建一个StringBuffer对象,然后调用append()方法将字符串片段拼接起来,最后调用toString()方法转换为字符串。 这样看来,String的连接操作就比StringBuffer多出了一些附加操作,效率上必然会打折扣。 但是,对于长度较小的字符串,”+“操作更加直观,更具可读性,有些时候可以稍微牺牲一下效率。
  • deleteCharAt():deleteCharAt() 方法用来删除指定位置的字符,并将剩余的字符形成新的字符串。例如: StringBuffer str = new StringBuffer(“abcdef”); str. deleteCharAt(3); 该代码将会删除索引值为3的字符,即”d“字符。 你也可以通过delete()方法一次性删除多个字符,例如: StringBuffer str = new StringBuffer(“abcdef”); str.delete(1, 4); 该代码会删除索引值为1~4之间的字符,包括索引值1,但不包括4。
  • insert():insert() 用来在指定位置插入字符串,可以认为是append()的升级版。例如: StringBuffer str = new StringBuffer(“abcdef”); str.insert(3, “xyz”); 最后str所指向的字符串为 abcdxyzef。
  • setCharAt() :setCharAt() 方法用来修改指定位置的字符。例如:
代码语言:javascript
复制
str.setCharAt(3, 'z');```该代码将把索引值为3的字符修改为 z,最后str所指向的字符串为 abczef。
### 效率对比

StringBuffer的执行效率比String快上千倍,这个差异随着叠加次数的增加越来越明显,当叠加次数达到30000次的时候,运行结果为:
String: 35923ms
StringBuffer: 8ms

所以,强烈建议在涉及大量字符串操作时使用StringBuffer。

## StringBuilder
StringBuilder类和StringBuffer类功能基本相似,方法也差不多,主要区别在于StringBuffer类的方法是多线程安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。
速度:
一般情况下,速度从快到慢为 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的。

**使用环境:**
操作少量的数据使用 String;
单线程操作大量数据使用 StringBuilder;
多线程操作大量数据使用 StringBuffer。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年08月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据类型以及变量
  • print
  • 数组
    • 定义
      • 初始化
      • 遍历
        • 二维数组
          • 总结
          • String
          • StringBuffer
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档