Java基础(一)

Java基础(一)

1、常量

Java 中的 final 关键字可以用于声明属性(常量),方法和类。当 final 修饰属性时,代表该属性一旦被分配内存空间就必须初始化,它的含义是“这是无法改变的”或者“终态的”。在变量前面添加关键字 final 即可声明一个常量。在 Java 编码规范中,要求常量名必须大写。

final 数据类型 常量名 = 值;

final double PI = 3.14;

常量也可以先声明,再进行赋值,但只能赋值一次,比如:

final int FINAL_VARIABLE;
FINAL_VARIABLE = 100;

2、变量

(通常变量命名以小写开头,例如 photoName)

2.1、成员变量(在类中声明的变量)

成员变量是定义在类中,方法体之外的变量。成员变量可以不初始化直接使用,初值根据类型来,可以时0或者0.0

2.2、局部变量(在方法中声明的变量)

在方法、构造方法或者语句块中定义的变量被称为局部变量,使用前必须先初始化赋值。

2.3、类变量

也叫静态变量,类变量也声明在类中,方法体之外,但必须声明为 static 类型。

数据类型默认值存储格式数据范围包装类型
short02 个字节-32,768 到 32,767Short
int04 个字节-2,147,483,648 到 2,147,483,647Integer
byte01 个字节-128 到 127Byte
char2 个字节Unicode 的字符范围:\u0000(即为 0)到 \uffff(即为 65,535)Character
long0L 或 0l8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807Long
float0.0F 或 0.0f4 个字节32 位 IEEEE-754 单精度范围Float
double0.0 或 0.0D(d)8 个字节64 位IEEE-754 双精度范围
booleanfalse1 位true 或 falseBoolean

需要注意的是 float 类型的数值后面需要加上 F 或者 f,否则会被当成 double 类型处理。double 类型的数值可以加上 D 或 d,也可以不加。boolean类型的话只能用true或者false,不支持0和非0,且不能和其他数据类型转换。

3、字符串

3.1、计算字符串长度 length() 方法;字符串比较equals() 、equalsIgnoreCase() 方法;字符串连接 “+” 或者 concat() 方法;charAt() 方法;

charAt() 方法的作用是按照索引值(规定字符串中第一个字符的索引值是 0,第二个字符的索引值是 1,依次类推),获得字符串中的指定字符。

String s = “abc”;

char c = s.charAt(1);

则变量 c 的值是 ‘b’

int len1 = s1.length(); //计算s1的长度

String s = new String("Java"); 
String m = "java";
System.out.println("用equals()比较,java和Java结果为"+s.equals(m)); //equals
System.out.println("用equalsIgnoreCase()比较,java和Java结果为"+s.equalsIgnoreCase(m)); //比较字符串,但是会忽视大小写。

String s1 = "abc";
String s2 = new String("abc");
boolean b = (s1 == s2);  //结果为 false

String s0 = new String("Hello ");
String s1 = "World" + "!";   //+号连接
String s2 = s0.concat(s1);  //concat()方法连接
  • 结论1.基本类型没有 equals() 方法,只有 “==” 比较,比较的是值。

  • 结论2.所有对象的 “==” 比较都是内存地址的比较。

  • 结论3:自定义对象的equals比较方式取决于equals方法;如果没有重写,比较的就是引用;如果进行了重写,那么比较规则取决于equals体。

3.2、字符串常用的提取方法

String是个常量,从一出生就注定不可变

类型方法作用
基本操作int length()获取字符串的长度
基本操作int indexOf(String str)返回指定字符在此字符串中第一次出现的索引
基本操作int lastIndexOf(String str)返回指定字符在此字符串中最后一次出现的索引
基本操作int charAt(int index)返回字符串中index位置上的字符,其中index的取值范围式:0~(字符串长度-1)
转换操作char[] toCharArray()将此字符串转换为一个字符数组
转换操作toString()转换为字符串类型
转换操作String valueOf(int num)将int类型的数转换为字符串
转换操作String toLowerCase()将String中的所有字符都转换为小写
转换操作String toUpperCase()将String中的所有字符都转换为大写
替换与去除String replace(char oldChar,char newChar)用newChar替换所有oldChar的字符得到一个新的字符串
替换与去除String replaceAll(String regex,String replacement)
替换与去除String trim()去除源字符串中首尾的空格
截取和分割String[] split(String regex)根据参数regex将原来的字符串分割成为若干个字符串
截取和分割String substring(int beginIndex)截取从索引beginIndex后的所有字符,包不包括beginIndex?
截取和分割String substring(int beginIndex,int endIndex)截取从beginIndex到endIndex索引之间的字符,边界包括谁?
判断操作boolean equals(Object anObject)与指定字符串比较是否相等
判断操作boolean startWith(String prefix)判断此字符串是否以指定的字符串开始
判断操作boolean endWith(String prefix)判断此字符串是否以指定的字符串结束
判断操作boolean contains(CharSequence s)判断此此字符串是否包含指定的字符序列
判断操作boolean isEmpty()判断当前字符串的长度是否为0
方法返回值功能描述
indexOf(char ch)int搜索字符 ch 第一次出现的索引
indexOf(String value)int搜索字符串 value 第一次出现的索引
lastIndexOf(char ch)int搜索字符 ch 最后一次出现的索引
lastIndexOf(String value)int搜索字符串 value 最后一次出现的索引
substring(int index)String提取从位置索引开始到结束的字符串
substring(int beginindex, int endindex)String提取 beginindex 和 endindex 之间的字符串部分
trim()String返回一个前后不含任何空格的调用字符串的副本

说明:在字符串中,第一个字符的索引为 0,子字符串包含 beginindex 的字符,但不包含 endindex 的字符。

String s = "abcdefabc";
System.out.println("字符a第一次出现的位置为"+s.indexOf('a'));
System.out.println("字符串bc第一次出现的位置为"+s.indexOf("bc"));
System.out.println("字符a最后一次出现的位置为"+s.lastIndexOf('a'));
System.out.println("从位置3开始到结束的字符串"+s.substring(3));
System.out.println("从位置3开始到6之间的字符串"+s.substring(3,6));

字符a第一次出现的位置为0
字符串bc第一次出现的位置为1
字符a最后一次出现的位置为6
从位置3开始到结束的字符串defabc
从位置3开始到6之间的字符串def

4、运算符

4.1、算术运算符

表格中的例子中,变量 a 的值为 5,变量 b 的值为 3,变量 i 的值为 1

算术运算符名称描述类型举例
+加法相加运算符两侧的值双目运算符a + b 等于 8
-减法左操作数减去右操作数双目运算符a - b 等于 2
*乘法相乘操作符两侧的值双目运算符a * b 等于 15
/除法左操作数除以右操作数双目运算符a / b 等于 1
%取余左操作数除右操作数的余数双目运算符a % b 等于 2
++自增操作数的值增加 1单目运算符++i(或 i++) 等于 2
自减操作数的值减少 1单目运算符–i(或 i–) 等于 0
int a = 5;
System.out.println("a++ = " + (a++));
System.out.println("++a = " + (++a));

a++ = 5
++a = 7

4.2、位运算符

位运算符名称描述举例
&按位与如果相对应位都是 1,则结果为 1,否则为 0(a&b),得到 12,即 0000 1100
按位或如果相对应位都是 0,则结果为 0,否则为 1( a 丨 b )得到 61,即 0011 1101
^按位异或如果相对应位值相同,则结果为 0,否则为 1(a^b)得到 49,即 0011 0001
~按位补翻转操作数的每一位,即 0 变成 1,1 变成 0(〜a)得到 -61,即 1100 0011
<<按位左移左操作数按位左移右操作数指定的位数a<<2 得到 240,即 1111 0000
>>按位右移左操作数按位右移右操作数指定的位数a>>2 得到 15 即 1111
>>>按位右移补零左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充a>>>2 得到 15 即 0000 111
int a = 60;
int b = 13;
System.out.println("a & b = " + (a & b));
System.out.println("a | b = " + (a | b));
System.out.println("a ^ b = " + (a ^ b));
System.out.println("~a = " + (~a));
System.out.println("a << 2 = " + (a << 2));
System.out.println("a >> 2 = " + (a >> 2));
System.out.println("a >>> 2 = " + (a >>> 2));

a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15

4.3、逻辑运算符

逻辑运算符名称描述类型举例
&& 或 &当且仅当两个操作数都为真,条件才为真双目运算符(a && b) 或 (a & b) 为假
|| 或 |两个操作数任何一个为真,条件为真双目运算符(a
!用来反转操作数的逻辑状态。如果条件为真,则逻辑非运算符将得到假单目运算符(!a)为假
^异或如果两个操作数逻辑相同,则结果为假,否则为真双目运算符(a ^ b) 为真

" && " 与 " || "是具有短路性质,而 “&” 没有,当按优先级顺序计算到当前表达式时,表达式的结果可以确定整个表达式的结果时,便不会继续向后进行判断和计算,而直接返回结果。

4.4、关系运算符 (生成值为布尔类型)

比较运算符名称描述举例
==等于判断两个操作数的值是否相等,如果相等则条件为真(a == b) 为 false
!=不等于判断两个操作数的值是否相等,如果值不相等则条件为真(a != b) 为 true
>大于判断左操作数的值是否大于右操作数的值,如果是那么条件为真(a > b) 为 false
<小于判断左操作数的值是否小于右操作数的值,如果是那么条件为真(a < b) 为 true
>=大于等于判断左操作数的值是否大于或等于右操作数的值,如果是那么条件为真(a >= b) 为 false
<=小于等于判断左操作数的值是否小于或等于右操作数的值,如果是那么条件为真(a <= b) 为 tr

三目运算符:

布尔表达式 ?表达式 1 : 表达式 2;

int a = 3;
int b = 5;
System.out.println("a > b ? a : b = " + (a > b ? a : b));

a > b ? a : b = 5

5、java方法

5.1、类方法(静态方法,用static修饰)

类方法可以被类创建的对象调用,也可以直接通过类名调用。

5.1.1、工厂方法

静态方法还有另外一种常见的用途。类似 LocalDate和 NumberFormat的类使用静态工厂方法( factory method)来构造对象。你已经见过工厂方法 LocalDate.now和 LocalDate.of。NumberFormat类如下生成不同风格的格式化对象:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
NumberFormat percentFormatter = NumberFormat.getPercentInstance();double x = 0.1;
System.out.println(currencyFormatter.format(x));// prints $0.10
System.out.println(percentFormatter.format(x));// prints 10%

为什么NumberFormat类不利用构造器完成这些操作呢?这主要有两个原因:

  • 无法命名构造器。构造器的名字必须与类名相同。但是,这里希望有两个不同的名字,分别得到货币实例和百分比实例。
  • 使用构造器时,无法改变所构造对象的类型。而工厂方法实际上将返回DecimalFormat类的对象,这是NumberFormat的一一个子类(有关继承的更多详细内容请参看第5章)。

5.2、实例方法

实例方法只能由对象来调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值