Java快速入门

1、JDK和JRE

(1)JDK

       是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

(2)JRE

       Java Runtime Environment缩写,指Java运行环境,是Sun的产品。运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。有时候直接是以java命名,如java8就是jre8。

目前在官网下载低于jdk1.8的java jdk的时候需要登陆,这边分享一个账号,方便下载 
账号:2696671285@qq.com 
密码:Oracle123

 

2、基本数据类型

       JAVA中一共有八种基本数据类型,他们分别是 :byte、short、int、long、float、double、char、boolean

类型

型别

字节

取值范围

byte

整型

1byte

-27 ~ 27-1

short

整型

2byte

-215 ~ 215-1

int

整型

4byte

-231 ~ 231-1

long

整型

8byte

-263 ~ 263-1

float

浮点型

4byte

3.402823e+38 ~ 1.401298e-45

double

浮点型

8byte

1.797693e+308~ 4.9000000e-324

char

文本型

2byte

0~216-1

boolean

布尔型

1byte

true/false

       对于long,若赋值大于int最大或最小值,需在数字后加L或l,表示该数字为长整型。在默认下,小数被看作double,若使用float型小数,则需要在小数后加F或f。可以使用后缀D或d来明确这是一个double,不加也不会出错,但声明float型变量时如果不加f,系统会认为变量是double,从而出错。布尔值不能与整数类型进行转换。

 

3、常量和变量

(1)常量

       Java中声明常量出数据类型外还要final关键字(也称“final变量”)。

final 数据类型 常量名[=值]

       注意,当定义的final变量属于“成员变量”(在类中声明时)是,必须在定义时就设定它的初值,否则将会产生编译错误。final变量在方法中时则没此限制。

(2)变量

a、成员变量

       类体中的变量为成员变量,分为静态变量(static)和实例变量。静态变量的有效范围可以跨类,甚至可达到整个应用程序之内,在定义它的类内直接存取外,还可以“类名.静态变量”的方式在其他类内使用。

class var{
    int x = 5;			// 实例变量
    static int y = 10;	// 静态变量
}

b、局部变量

       在类的方法体中定义的变量。当局部变量和成员变量的名字相同时,成员变量将被隐藏。

 

4、移位操作

(1)左移(<<)

       将运算符左边的操作数的二进制数据,安装运算符右边操作数指定的位数向左移动,右边移空的部分补0。

(2)右移(>>)

       如果最高位是0,右移空的位填入0;若干==如果最高位是1,右移空的位填入1。

(3)无符号右移(>>>)

       无论最高位是0还是1,右移空的为的最高位都填入0。

注:以为可实现整数乘或除以2的n次方的效果。一个数左移n位,就是将这个数乘2的n次方;一个数右移n位,就是将这个数除以2的n次方。

 

5、循环控制之“标签”功能

       Java中break和continue都支持“标签”功能,可指定跳出的循环。

Loop: for (int i = 0; i < 3; i++) {// 在for循环前用标签标记
	for (int j = 0; j < 6; j++) {
		if (j == 4) {// 如果j等于4的时候就结束外层循环
			break Loop;// 跳出Loop标签标记的循环体
		}
		System.out.println("i=" + i + " j=" + j);
	}
}

 

6、String类

       String类用来处理字符,包含在java.lang包中。

(1)创建字符串

a、String(char a[])

       用一个字符数组a创建一个String对象。

例:

char a[] = {‘g’, ’o’, ‘o’, ‘d’};
String s = new String(a);
// 等价于:
String s = new String(“good”);

b、String(char a[], int offset, int length)

       提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度。

例:

char a[]{‘s’, ‘t’, ‘u’, ‘d’, ‘e’, ‘n’, ‘t’};
String s = new String(a, 2, 4);
// 等价于:
String s = new String(“uden”);

c、String(char[] value)

       该构造方法可分配一个新的String对象,使其表示字符数组参数中所有元素连接的结果。

例:

char a[]{‘s’, ‘t’, ‘u’, ‘d’, ‘e’, ‘n’, ‘t’};
String s = new String(a);
// 等价于:
String s = new String(“student”);

d、通过字符串常量的引用赋值给一个字符串变量。

String str1, str2;
str1 = “studnet”;
str2 = “studnet”;
// 注:此时str1和str2引用相同的字符串常量,因此具有相同的实体。

(2)连接多个字符串

       在String中使用“+”可连接多个字符串。在字符串中也可同其他基本数据类型进行连接。如果将字符串同这些数据类型数据进行连接,会将这些数据直接转换成字符串,即此时会自动调用toString()方法。

int booktime = 4; // 声明的int型变量booktime
float practice = 2.5f; // 声明的float型变量practice
// 将字符串与整型、浮点型变量相连,并将结果输出
System.out.println("我每天花费" + booktime + "小时看书;"
    + practice + "小时上机练习");

(3)字符串查找

       String提供两种字符串查找方法。

a、indexOf(String s)

       该方法会从当前字符串的开始位置搜索s的位置,如果检索到字符串s则返回参数字符串s在指定字符串中首次出现的索引位置 ;如果没有检索到字符串s,返回-1;

例:

String str = ”we are student”;
int size = str.indexOf(“a”);	// size的值为3

b、lastIndexOf(String str)

       该方法从右向左反向查找指定的字符串,如果找到指定字符串,则返回该字符串中第一个字符的索引(实际上就是返回指定字符串最后一次出现的索引位置);若干没有找到则返回-1。

       注:如果lastIndexOf()方法中的参数是空字符串””,则返回结果与调用该字符串length()方法的返回结果相同(即返回该字符串的长度)。

c、charAt()

       该方法可将指定索引处的字符返回。

例:

String str = "hello word"; // 定义字符串str
char mychar = str.charAt(6); // 将字符串str中索引位置是6的字符返回
System.out.println("字符串str中索引位置是6的字符为:" + mychar); // 输出信息

(4)获取子字符串

a、substring(int beginIndex)

       返回指定索引位置开始截取直到该字符串结尾的子串。

str.substring(int beginIndex);

b、substring(int beginIndex, int endIndex)

       返回字符串从beginIndex开始到endIndex索引位置的子串,实际是左闭右开的位置,即包含beginIndex索引的字符但是不包含endIndex位置的字符。

例:

String str = "hello word"; // 定义的字符串
String substr = str.substring(0, 3); // 对字符串进行截取
System.out.println(substr); // 输出截取后的字符串,输出hel

(5)去除空格

       trim()返回字符串的副本,忽略前导空格和尾部空格。

例:

String str = "  Java  class   "; // 定义字符串str
System.out.println("字符串原来的长度:" + str.length()); 		// 将str原来的长度输出为16
System.out.println("去掉空格后的长度:" + str.trim().length());    // 去掉空格后为11

(6)字符串替换

       replace()可将指定字符或字符串替换成新的字符或字符串。如果字符串oldChar中没有出现该对象表达式中的字符串序列中,则将原字符串返回。如果要替换的字符oldChar在字符串中重复出现多次,replace()会将所有oldChar全部替换成newChar。

str.replace(char lodChar, char newChar);

(7)判断字符串的开始于结尾

a、startsWith()

       判断当前字符串对象的前缀是否为参数指定的字符。

str.startsWith(String preflx);

b、endsWith()

       判断当前字符串对象的后缀是否为参数指定的字符。

str.endsWith();

(8)判断字符串是否相等

       对字符串对象的比较不能简单使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同,而字符串对象拥有不同的内存地址,所有即使两个字符串的内容相同,两个对象的内存地址也是不同的。

a、equals()

       如果两个字符串具有相同的字符和长度,则使用equals()进行比较时,返回true。

str.equals(String otherstr);

b、equalsIgnoreCase

       使用equals()比较两个字符串时时区分大小写的,而使用equalsIngoreCase()则是在忽略大小写的情况下比较两个字符串是否相等,返回结果为boolean类型。

str.equalsInnoreCse(String otherstr);

(9)按字典顺序比较两个字符串

       compareTO()为按字典顺序比较两个字符串,该比较基于字符串中各个字符串的Unicode值,按字段顺序将此String对象表示的字符序列与参数字符串的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0。

       注:compareTo()方法只有在equals(object)方法返回true时才放回0。

String str = new String("b");
String str2 = new String("a"); // 用于比较的3个字符串
String str3 = new String("c");
System.out.println(str + " compareTo " + str2 + ":"
    + str.compareTo(str2)); // 将str与str2比较的结果输出:1
System.out.println(str + " compareTo " + str3 + ":"
    + str.compareTo(str3)); // 将str与str3比较的结果输出:-1

(10)字母大小写转换

a、toLowerCase()

       将字符串中所有字符从大写转换为小写。

str.toLowerCase();

b、toUpperCase()

       将字符串中所有字符从小转换为大写。

str.toUpperCase();

       注:使用toLowerCase()和toUpperCase()进行大小写转换时,数字或非字符不受影响。

(11)字符串分割

a、split(String sign)

       根据给定的分割符对字符串进行拆分。sign为分割字符串的分割符,也可是正则表达式。

b、split(Sring sign, int limit)

       根据给定的分割符对字符串进行拆分,并限定拆分次数。sign为分割字符串的分割符,也可是正则表达式;limit为模式匹配次数,如果值设置为n,那么将根据正则表达式匹配n-1次,得到的结果数组的长度不会大于n,数组的最后一项是最后匹配的分割符以后的全部内容。

例:

String str = "192.168.0.1";
// 按照"."进行分割,使用转义字符“\\.”
String[] firstArray = str.split("\\.");
// 按照"."进行两次分割,使用转义字符“\\.”
String[] secondArray = str.split("\\.", 2);
// 输出str原值
System.out.println("str的原值为:[" + str + "]");
// 输出全部分割的结果
System.out.print("全部分割的结果:");
for (String a : firstArray) {
	System.out.print("[" + a + "]");
}
System.out.println();// 换行
// 输出分割两次的结果
System.out.print("分割两次的结果:");
for (String a : secondArray) {
	System.out.print("[" + a + "]");
}
System.out.println();

输出:

(12)格式化字符串

a、format(String format, Object ...args)

       使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。

  • foramt:格式字符串
  • args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数模是可变的,可为0。

b、format(Local l, String format, Object ...args)

  • l:格式化过程中要应用的语言环境。如果l为null,则不会进行本地化。
  • foramt:格式字符串
  • args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数模是可变的,可为0。

例:

Date date = new Date();
String time = String.format("%tc", date);

日期格式化转换符:

时间格式化转换符:

日期和时间组合的格式:

常规转换符:

(13)正则表达式

       正则表达式通常用于判断语句中某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。

正则表达式的元字符:

       注:正则表达式中“.”代表任何一个字符,因此正则表达式中如果想使用普通意义的点字符“.”,必须使用转义字符“\”。

       正则表达式中可使用方括号括起若干字符来表示一个元字符,该元字符可代表方括号中的任何一个字符,例如:

       正则表达式之后再给你允许使用限定符来限定元字符出现的次数,例如:

       为了检查输入的数据是否满足某种格式,从JDK1.4开始可以使用String类的matches()方法进行判断。语法如下所示:

boolean matches(String regex) 
  • regex:指定的正则表达式

返回值:如果当前字符串与正则表达式匹配,则该方法返回true,否则返回false。

例:

// 定义要匹配E_mail地址的正则表达式
String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
String str1 = "1111@111ffyu.dfg.com";
if (str1.matches(regex)) { // 判断字符串变量是否与正则表达式匹配
    System.out.println(str1 + "是一个合法的E-mail地址格式");
}

输出:

(14)字符串生成器

        创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+” 可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大地增加系统开销。而J2SE 5.0新增了可变的字符序列String- Builder类,大大提高了频繁增加字符串的效率。

String str = ""; // 创建空字符串
// 定义对字符串执行操作的起始时间
long starTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) { // 利用for循环执行10000次操作
	str = str + i; // 循环追加字符串
}
long endTime = System.currentTimeMillis(); // 定义对字符串操作后的时间
long time = endTime - starTime; // 计算对字符串执行操作的时间
System.out.println("Sting消耗时间:" + time); // 将执行的时间输出

StringBuilder builder = new StringBuilder(""); // 创建字符串生成器
starTime = System.currentTimeMillis(); // 定义操作执行前的时间
for (int j = 0; j < 10000; j++) { // 利用for循环进行操作
	builder.append(j); // 循环追加字符
}
endTime = System.currentTimeMillis(); // 定义操作后的时间
time = endTime - starTime; // 追加操作执行的时间
System.out.println("StringBuilder消耗时间:" + time); // 将操作时间输出

输出:

       通过这一实例可以看出,两种操作执行的时间差距很大。如果在程序中频繁地附加字符串,建议使用StringBuilder. 新创建的StringBuilder对象初始容量是16个字符,可以自行指定初始长度。如果附加的字符超过可容纳的长度,则StringBuilder对象将自动增加长度以容纳被附加的字符。若要使用StringBuilder最后输出字符串结果,可使用toString0方法。利用StringBuilder类中的方法可动态地执行添加、删除和插入等字符串的编辑操作。该类的常用方法如下。

(a) append(content)方法
       该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如int、 boolean、char、 String、 double 或者另一个字符串生成器等。
语法如下:

append(content);
  • content:表示要追加到字符串生成器中的内容,可以是任何类型的数据或者其他对象。

(b) insert(int offset, arg)方法
       该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入int、float、char和boolean等基本数据类型或其他对象。
语法如下:

 insert(int offset, arg)
  • offset:字符串生成器的位置。该参数必须大于等于0,且小于等于此序列的长度。
  • arg:  将插入至字符串生成器的位置。该参数可以是任何的数据类型或其他对象。

例:

StringBuilder bf = new StringBuilder(“hello”);
bf.insert(5, “word”);
System.out.println(bf.toString());		// 输出helloworld

(c) delete(int start,int end)方法
       移除此序列的子字符串中的字符。该子字符串从指定的start 处开始,- -直到索引end -1处的字符,如果不存在这种字符,则一-直到序列尾部。如果start等于end,则不发生任何更改。
语法如下:

delete(int start,int end)
start:将要删除的字符串的起点位置。
end:将要删除的字符串的终点位置。

例:

StringBuilder bf = new StringBuilder(“StringBuilder”);
bf.delete(5, 10);
System.out.println(bf.toString());		// 输出Strinder

 

7、数组

       Java中将组数看作一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组却是对象。数组作为对象允许使用new关键字进行内存分配。在使用数组之前,必须首先定义数组变量所属的类型。

(1)创建一维数组

(a)先声明,再用new运算符进行内存分配

       声明一维数组有两种方式:

数组元素类型 数组名字[];
数组元素类型[] 数组名字;

例:

int arr[];
string[] str;

       声明数组后,还不能立即访问它的任何元素,因为声明数组只是给出了数组名字和元素的数据类型,要想真正使用数组,还要为它分配内存空间。在为数组分配内存空间时必须指明数组的长度。为数组分配内存空间的语法格式如下:

数组名字 = new 数组元素的类型[数组元素的个数];

例:

arr = new int[5];

(b)声明的同时为数组分配内存

       数组元素的类型 数组名 = new 数组元素的类型[数组元素的个数];

例:

int month[] = new int[12];

       注:使用new为数组分配内存时,整型数组中各个元素的初始值都是0。

(2)初始化一维数组

两种形式:

例:

int arr[] = new int[]{1, 2, 3};
int arr2[] = {1, 2, 3};

(3)二维数组的创建

(a)先声明,再用new运算符进行内存分配

数组元素类型 数组名字[][];
数组元素类型[][] 数组名字;

两种方法为数组分配内存:

// 直接为每一维分配内存空间
a = new int[2][4];

// 分别为每一维分配内存
a = new int[2][]
a[0] = new int[2];
a[1] = new int[3];

(4)二维数组初始化

type arrayname[][] = {value1, value2... valuen};

例:

int myarr[][] = {{1, 2}, {4, 5}};

注:对于整型二维数组,创建成功后系统会给数组中每个元素赋予初始值0。

(5)填充替换数组元素

    数组中的元素定义完成后,可通过Arrays类的静态方法fll0来对数组中的元素进行替换。该方法通过各种重载可完成对任意类型的数组元素的替换。

(a)fill(int[] a, int value)

       将指定的int值分配给int型数组的每个元素。

  • a:要进行元素替换的数组
  • value:要存储数组中的所有元素的值

例:

int arr[] = new int[5];
Array.fill(arr, 8);		// arr中的每个元素都有8替换

(b)fill(int[] a, int fromIndex, int toIndex, int value)

       将指定的int值分配给int型数组指定范围中的每个元素。填充的范围从索引fromIndex(含)到索引toIndex(不含)。如果fromIndex = toIndex,则填充范围为空。

  • a:要进行填充的数组
  • fromIndex:要使用指定值填充的第一个元素的所有(含)
  • toIndex:要使用指定值填充的最后一个元素的所有(不含)
  • value:要存储数组中的所有元素的值

例:

int arr[] = new int[]{45, 52, 32, 10};
Arrays.fill(arr, 1, 2, 8);		// 将数组中的第1个元素替换为8

注:如果指定的索引位置大于或等于要进行填充的数组的长度,则会报出ArrayIndexOutOfBoundsException (数组越界异常)异常。

(6)对数组排序

       通过Arrays类的静态sort(0方 法可以实现对数组的排序。sort)方 法提供了多种重载形式,可对任意类型的数组进行升序排序。

例:

int arr[] = new int[]{45, 52, 12, 32};
Arrays.sort(arr);	// 升序排序

       上述实例是对整型数组进行排序。Java 中的String 类型数组的排序算法是根据字典编排顺序排序的,因此数字排在字母前面,大写字母排在小写字母前面。

(7)复制数组

(a)copyOf(arr, int newlength)

       复制数组至指定长度。

  • arr:要进行复制的数组;
  • newlength: int 型常量,指复制后的新数组的长度。如果新数组的长度大于数组arr 的长度,则用0填充(根据复制数组的类型来决定填充的值,整型数组用0填充,char 型数组则使用。null来填充);如果复制后的数组长度小于数组arr 的长度,则会从数组arr的第一个 元素开始截取至满足新数组长度为止。

例:

int arr[] = new int[] {12, 52, 32};
int newArr[] = Arrays.copyOf(arr, 5);	// 将arr的值复制到newArr

(b)copyOfRange(arr, int fromIndex. int toIndex)

       将指定数组的指定长度复制一个新数组中。

  • arr:要进行复制的数组;
  • formIndex:指定开始复制数组的索引位置。formIndex 必须在0至整个数组的长度之间。新数组包括索引是formIndex的元素。
  • toIndex:要复制范围的最后索引位置。可大于数组arr的长度。新数组不包括索引是toIndex的元素。

例:

int arr[] = new int[] {12, 52, 32, 56, 74};
int newArr[] = Arrays.copyOf(arr, 0, 3);	// 将arr的第0个到第2个元素复制到newArr中

(8)数组查询

       Arrays类的binarySearch()方法,可使用二分搜索法来搜索指定数组,以获得指定对象。该方法返回要搜索元素的索引值。binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。binarySearch0方法有两种参数类型:

(a)binarySearch(Object[], Object key)

  • a:要搜索的数组
  • key:要搜索的值

       如果key包含在数组中,则返回搜索值的索引。如果数组中的所有元素都小于指定的键,则返回-(a.length+1) ;如果数组中的所有元素都大于指定的键,返回-1。即不在数组中的时返回的是该key在从小到大排序的数组中的索引值的负数。

注:

       必须在进行此调用之前对数组进行排序(通过sort())方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。

例:

int ia[] = new int[] {4, 25, 10 }; 
Arrays.sort(ia); 
int index = Arrays.binarySearch(ia, 0, 1, 8);	

       上面的代码中变量index的值是元素“8”在数组arr中索引在0~1内的索引位置。由于在指定的范围内并不存在元素“8”,index 的值是“_”(插入点)。如果对数组进行排序,元素“8”应该在“25”的前面,因此插入点应是元素“25”的索引值2,所以index的值是-2。

例:

int ia[] = new int[] { 1, 8, 9, 4, 5 };	 // 定义int型数组ia
Arrays.sort(ia); 		        // 将数组进行排序
int index = Arrays.binarySearch(ia, 4);	// index 值为“1”,是对ia排序后元素4的索引位置

(b)binarySearch(Object[] a, int fromIndex, int toIndex, Object key)

       在指定的范围内检索某一元素。

  • a:要进行检索的数组。
  • fromIndex:指定范围的开始处索引(包含)。
  • toIndex:指定范围的结束处索引(不包含)。
  • key:要搜索的元素。

       在使用该方法之前同样要对数组进行排序,来获得准确的索引值。如果要搜索的元素key在指定的范围内,则返回搜索键的索引。如果范围中的所有元素都小于指定的键,则为返回toIndex +1;如果范围中的所有元素都大于指定的键,则为返回-1。即不在数组中的时返回的是该key在从小到大排序的数组中的索引值的负数。

       如果指定的范围大于或等于数组的长度,则会报出ArrayIndexOutOfBoundsException异常。

例:

String str[] = new String[] { "ab", "cd", "ef", "yz" };
Arrays.sort(str); // 将数组进行排序
int index = Arrays.binarySearch(str, 0, 2, "cd");	// index的值为1
// int index = Arrays.binarySearch(str, 0, 2, "g");	// index的值为-3

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值