Java 变量和常量
Generalization
在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。
一、变量variable
1.变量代表程序的状态,所有程序都使用变量临时存储各种数据。
2.Java语言是一种强类型的语言(总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。E.g:java、.NET、C++、python。一般说来,在创建大型程序时,强类型有助于减少程序错误。),所以变量在使用以前必须首先声明。
3.Java支持变量
I.局部变量
·局部变量的方法,构造函数或块中声明。
·创建局部变量的方法,构造函数或块时进入,一旦退出方法,构造函数或块中的变量将被销毁。
·访问修饰符不能用于局部变量。
·局部变量是可见的,只有内声明的方法,构造函数或块。
·局部变量在堆栈级别内部实现。
·在这里对局部变量没有默认值,因此局部变量应该声明和初始值应在第一次使用前分配。
II.实例变量
·实例变量在类中声明,但在方法的外面,构造函数或任何块。
·当空间分配给某个对象在堆中,插槽为每个实例变量创建值。
·实例变量认为必须由一个以上的方法,构造函数或块,或一个对象的状态的关键部分必须出现在整个类中引用的值。
·实例变量可以在使用前或后级的级别声明。
·访问修饰符可以给出实例变量。
·实例变量对于所有方法,构造函数和块在类中可见。通常,建议,使这些变量私有(接入层)。然而能见度子类可以给这些变量与使用访问修饰符。
·实例变量有默认值。对于数字的默认值是0,为布尔值是false和对象引用为null。值可以在声明或构造函数中分配。
·实例变量可以直接通过调用变量名的类的内部访问。然而在静态方法和不同的类(当实例变量被赋予访问)应使用完全限定名调用 ObjectReference.VariableName.
III.类/静态变量
·类变量也称为静态变量在类的static关键字声明的,但在方法外面,构造函数或块。
·每个类变量只有一个副本,不管有多少对象从它被创建。
·静态变量很少使用不是被声明为常量等。常量是被声明为公共/私营,最终和静态变量。常量变量从来没有从他们的初始值改变。
·静态变量被存储在静态存储器中。这是罕见的使用静态变量以外声明为final,用作公共或私有常数。
·在程序启动时的静态变量被创建,在程序停止销毁。
·能见度类似于实例变量。然而,大多数静态变量声明为 public,因为它们必须可用于类的使用者。
·默认值是相同的实例变量。对于数字,默认值是0;为布尔值,它是假的,和对象引用,它为null。值可以在声明或构造函数中分配。另外值可以在特殊的静态初始化块进行分配。
·静态变量可以通过调用与类名来访问。 ClassName.VariableName.
·当定义的变量为 public static final ,那么变量的名称(常量)都是大写。如果静态变量是不公开的和最终的命名语法是相同的实例变量和局部变量。
二、常量const
1.常量代表程序运行过程中不能改变的值。
2.常量在程序运行过程中主要有2个作用:
i. 代表常数,便于程序的修改(例如:圆周率的值)
ii. 增强程序的可读性(例如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其数值分别是1、2、3和4)
3.常量的语法格式和变量类型,只需要在变量的语法格式前面添加关键字final即可。在Java编码规范中,要求常量名必须大写。
则常量的语法格式如下:
final 数据类型 常量名称 = 值;
final 数据类型 常量名称1 = 值1, 常量名称2 = 值2,……常量名称n = 值n;
例如:
final double PI = 3.14;
final char MALE=‘M’,FEMALE=‘F’;
在Java语法中,常量也可以首先声明,然后再进行赋值,但是只能赋值一次,示例代码如下:
final int UP;
UP = 1;
关于final详解 【修饰变量】:
2.被static修饰而没有被final修饰的类的属性变量只能在两种情况下初始化:(可以不初始化) 3.同时被final和static修饰的类的属性变量只能在两种情况下初始化:(必须初始化)
java中的 final变量==常量 【final变量的变与不变】:final表示变量的值或引用不变 【final关键字的具体应用】:
延伸: 在interface里面的变量都是public static final 的。所以你可以这样写: 解释:
|
三、Java的资料形态
1.整数
(1)Byte(8位):java.lang.Byte (-2^7 ~ 2^7-1 -128 ~ 127)
(2)Short(16位):java.lang.Short(-2^15 ~2^15-1 -32768 ~ 32767)
(3)Int(32位):java.lang.Integer(-2^31 ~ 2^31-1 -2147483648 ~ 2147483647)
(4)Long(64位):java.lang.Long
(5)其他进制表示(0b1111 O1111 1111 Ox1111)
2.浮点数
(1)float:java.lang.Float(3.4028235E38 ~ 1.4E-45)
(2)Double:java.lang.Double(1.7976931348623157E308 ~ 4.9E-324)
float表示单精度浮点数在机内占4个字节,用32位二进制描述。 double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。 |
3.Boolean:java.lang.Boolean(frue/false)
4.Char:java.lang.Character(0 - 65535)
%b 真假 %h 杂凑码 %s 字符串 %c 字元 %d 十进制整数 %o 八进制整数 %x 十六进制整数 %e 科学计数法浮点数 %f 十进制浮点数 %g 科学计数法浮点数 %a 十六进制浮点数 |
5.字串
(1)长度 int length():计算UNICODE内字元的个数
(2)连接
I.String concat(String str)——將 str 接到字串的後面
II.Str = str1 + str2——將 str1 跟 str2 做連接
(3)格式化
I.static String format(Locale l, String format, Object... args)
II.static String format(String format, Object... args)
(4)分割:將原字串利用 regex 拆開存入字串陣列,然後回傳這個字串陣列
String[] split(String regex)
String[] split(String regex, int limit)
(5)取得子字串:
String substring(int beginIndex, intendIndex)——回傳從 beginIndex 到 endIndex 之間的子字串
String substring(int beginIndex)——回傳從 beginIndex 到結尾的子字串
CharSequence subSequence(int beginIndex, int endIndex)——回傳從 beginIndex 到 endIndex 之間的CharSequence 型態物件
String trim() 回傳去除首尾空白符號的子字串
(6)字串寻找:
int indexOf(int ch) ——回傳第一個 ch 字元的索引值
int lastIndexOf(int ch) ——回傳最後一個 ch 字元的索引值
int indexOf(int ch, int fromIndex)——回傳 fromIndex 之後的第一個 ch 字元的索引值
int lastIndexOf(int ch, int fromIndex)——回傳 fromIndex 之前的最後一個 ch 字元的索引值
int indexOf(String str)—— 回傳第一個子字串 str 開始的的索引值
int lastIndexOf(String str) ——回傳最後一個子字串 str 開始的的索引值
boolean contains(CharSequence s) ——判斷字串中是否包含 s
(7)字串替换:
String replace(char oldChar, char newChar) ——將 oldChar 字元以 newChar 置換
String replace(CharSequence target, CharSequence replacement) ——將 target 子字串以 replacement 置換
String replaceAll(String regex, String replacement) ——將符合 regex 置換成 replacement
String replaceFirst(String regex, String replacement) ——將第一個符合 regex 的子字串置換成replacement
(8)字串比较:
boolean endsWith(String suffix) |
判斷字串是否以 suffix 結尾 |
boolean startsWith(String prefix) |
判斷字串是否以 prefix 開頭 |
boolean startsWith(String prefix, int offset) |
判斷從 offset 開始的子字串是否為 prefix |
int compareTo(String anotherString) |
逐字元比較原字串與 anotherString ,若無不同,也就是兩個字串中的每 個字元都相同就回傳 0 ,若有不同則回傳長度差或第一個不同字元的 Unicode 差值 |
int compareToIgnoreCase(String str) |
逐字元比較原字串與 anotherString ,不考慮大小寫的分別,若無不同, 也就是兩個字串中的每個字元都相同就回傳 0 ,若有不同則回傳長度差或第 一個不同字元的 Unicode 差值 |
boolean equals(Object anObject) |
判斷字串是否與 anObject 相同 |
boolean equalsIgnoreCase(String anotherString) |
判斷字串是否與 anotherString 相同,不考慮大小寫的分別 |
boolean regionMatches(int toffset, String other, int ooffset, int len) |
判斷從 toffset 開始長度為 len 的子字串,是否與 other 從 ooffset開始 長度為 len 的子字串相同 |
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) |
判斷從 toffset 開始長度為 len 的子字串,是否與 other 從 ooffset開始 長度為 len 的子字串相同, ignoreCase 提供是否要忽略文大小寫字母 |
boolean matches(String regex) |
判斷字串是否符合 regex |
(9)字串大小写控制:
String toLowerCase() 將字串中所有英文字母改為小寫
String toUpperCase() 將字串中所有英文字母改為大寫
6.Adf
四、资料形态转换
1.自动转换(小到大):byte - short - int - long - float - double
2.强迫转换(大到小):反过来。。
五、命名规则
1.系统保留字
abstract boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while
2.命名规范
3.
六、阵列