📄 05. core java note.txt
字号:
sun考试: SCJP:只考core java SCJD:+jdbc+swing
SCWCD:+servlet+jsp(JAVA EE) SCEA:+EJB+Webserver(架构师)
必须养成优秀程序员的编写习惯:缩进(用空格)、注释、命名约定。
大小写敏感。
单独的“;”代表一条空语句。
main函数是我们整个程序的执行入口所以必须是静态公开的。
必须写成这样: public static void main(String[]args){...}
生成jar包:
在eclipse里,选中要打包的几个文件,右键-Export-写文件名-Next-Next-选main方法的class-finish
在jar包的同一文件夹下,新建一个空文档,写“java -jar ./文件名.jar”,再把这文档改成“文件名.sh”
把这sh的属性-权限 改成“允许以程序执行文件”。以后双击这个sh即可运行
文本注释 Comments:
注释必须写上,以便其他人阅读、引用和维护。
单行注释 //...
多行注释 /* ....*/
文档注释 /** ... */
文档注释,可以使用JDK的javadoc工具从原文件中抽取这种注释形成程序的帮助文档。
使用javadoc命令建立HTML格式的程序文档:
javadoc[options][packagenames][sourcefiles][@files]
标示符:
用来给一个类、变量或方法命名的符号
标示符命名规则:
1. 以字母,“_”和“$”开头。可以包含字母、数字、“_”和“$”。
2. 大小写敏感
3. 不能与保留关键字冲突
4. 没有长度限制(暗示使用长的标示符,以便阅读。长名字可使用工具输入)
5. 建议使用JavaBeans规则命名,并根据方法的目的,以 set、get、is、add 或 remove 开头。
标示符命名约定:
1. 类名、接口名:每个单词的首字母应该大写,尤其第一个单词的首字母应该大写。(驼峰规则)
class MyFirstClass
interface Weapon
2. 字段、方法以及对象:第一个单词首字母应小写,其他单词首字母大写。(以便跟上面的有所区别)
boolean isWoman
void setName(String name)
3. 常量:全部用大写字母表示。如果由几个单词组成,则由下画线连接。
public final int GREEN
public final int HEAD_ COUNT
4. Java包(Package):全部用小写字母。
package java.awt.event
java.lang.System.gc(); / java.lang.Runtime.gc();
垃圾回收的建议语句,只能建议而不能强制回收
注意: System.gc(); 是静态方法,可直接调用。
java.lang.Runtime.gc(); 不是静态方法,不能直接在main方法里调用
package 包
目的:命名冲突,便于管理类
运行时,先找到包所在目录,再执行“ 包名.类名”
import 导入。导入包内的类
定义包之后,执行时:javac -d 包的路径 类名.java
java 包名.类名
import java.util.*; //表示导入java.util里面的所有类;但 import java.*; 则什么类都导不进
用“*”表示导入当前包的类,不包括子包的类(可把包看作目录)。
声明规则
* 一个源代码文件最多只能有一个公共(public)类。
* 如果源文件包含公共类,则该文件名称应该与公共类名称相同。
* 一个文件只能有一个包语句,但是,可以有多个导入语句。
* 包语句(如果有的话)必须位于源文件的第一行。
* 导入语句(如果有的话)必须位于包之后,并且在类声明之前。
* 如果没有包语句,则导入语句必须是源文件最前面的语句。
* 包和导入语句应用于该文件中的所有类。
* 一个文件能够拥有多个非公共类。
* 没有公共类的文件没有任何命名限制。
输入:使用Scanner 获取输入
在J2SE 5.0中,可以使用java.util.Scanner类别取得使用者的输入
可以使用这个工具的 next() 功能,来获取用户的输入
Scanner s = new Scanner(System.in);
System.out.printf("您输入了字符: %s \n", s.next());
System.out.printf("您输入了数字: %d \n", s.nextInt());
输入:使用 BufferedReader 取得输入//5.0之前的读取键盘的方法
BufferedReader建构时接受java.io.Reader物件
可使用java.io.InputStreamReader
例: import java.io.InputStreamReader;
import java.io.BufferedReader;
class n{
public static void main(String[] args){
System.out.println("请输入一列文字,包括空格:");
BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
String next;
try{next = s.readLine();//此语句会抛异常,需处理
System.out.println("您输入了文字:" + next);
}catch(Exception e){}
}}
数值保存方式:
正数= 二进制
负数= 补码
补码= 反码 +1 正数=负数的补码(反码+1)
反码= 非(二进制数)
八进制数,零开头 011(八进制)=9(十进制)
十六进制数,零x开头 0x55(十六进制)=5*16+5(十进制)
类型:数据都必须有类型
boolean (8bit,不定的)只有true和false两个值
char 16bit, 0~2^16-1 (2^16=6万6)
byte 8bit, -2^7~2^7-1 (2^7=128; 注意:两个 byte 数相加,变 int 型)
short 16bit, -2^15~2^15-1 (2^15=32768)
int 32bit, -2^31~2^31-1 (2147483648,20亿,10位有效数字)
long 64bit, -2^63~2^63-1 (900亿亿,20位有效数字)
float 32bit, 9位有效数字,含小数(四舍五入)(小数点算一位,正负号不算)
double 64bit, 18位有效数字
注:float 和 double 的小数部分不可能精确,只能近似。
比较小数时,用 double i=0.01; if ( i - 0.01 < 1E-6) ...
不能直接 if (i==0.01)...
默认,整数是int类型,小数是double类型
long类型值,需跟L或l在数据后;float类型要跟f或F;或强制类型转换
科学计数法:12.5E3
类型转换默认序列:
byte > short > int > long > float > double
char 」
注意:默认类型转换(自动类型提升)会丢失精度,但只有三种情况:
int>float; long>float; long>double. 看一下他们的有效位就明白。
二进制是无法精确的表示 0.1 的。
进行高精度运算可以用java.math包中BigDecimal类中的方法。
自动类型提升又称作隐式类型转换。
强制类型转换:int ti; (byte) ti ;
强制转换,丢弃高位
宣告变量名称的同时,加上“final”关键词来限定,这个变量一但指定了值,就不可以再改变它的值
如:final int n1= 10; n1=20; 这就会报错
输出命令:
System.out.println() 会自动换行的打印
System.out.print() 直接打印,不会自动换行
System.out.printf() 可插入带 % 的输入类型,前两种只可以插入转义符, 不能插入 % 的数据或字符串
在 printf 里面,输出有5个部分 %[argument_index$][flags][width][.precision]conversion
以“%”开头,[第几个数值$][flags][宽度][.精确度][格式]
printf()的引入是为了照顾c语言程序员的感情需要
格式化输出 Formatter;格式化输入 Scanner;正则表达式
输出格式控制:
转义符:
\ddd 1到3位8进制数指定Unicode字符输出(ddd)
\uxxxx 1到4位16进制数指定Unicode字符输出(xxxx)
\\ \
\' '
\" "
\b 退格(光标向左走一格)
\f 走纸转页,换页
\n 换行
\r 光标回到行首,不换行
\t 跳格
%% %
%d 输出10进位整数,只能输出Byte、Short、 Integer、Long、或BigInteger类型。(输出其他类型会抛异常)
%f 以10进位输出浮点数,提供的数必须是Float、Double或 BigDecimal (输出Integer类型也抛异常)
%e,%E 以10进位输出浮点数,并使用科学记号,提供的数必须是Float、 Double或BigDecimal
%a,%A 用科学记号输出浮点数,以16进位输出整数部份,以10进位输出指数部份,数据类型要求同上。
%o (字母o)以8进位整数方式输出,限数据类型:Byte,Short,Integer,Long或BigInteger
%x,%X 将浮点数以16进位方式输出,数据类型要求同上
%s,%S 将字符串格式化输出(可输出任何类型)
%c,%C 以字符方式输出,提供的数必须是Byte、Short、Character或 Integer
%b,%B 输出"true"或"false"(%B输出"TRUE"或"FALSE");另外,非空值输出true,空值输出 false
%t,%T 输出日期/时间的前置,详请看在线API文件
/********找出各字符的Unicode值*******************/
class Test{
public static void main(String[] args) {
String s= ""+0+'a'; //0=48,9=57
//A=65,Z=90;a=97,z=122;空格=32
int i = s.codePointAt(0);
int j = s.codePointAt(1);
//利用这codePointAt(int index)方法
System.out.printf("%d %d",i,j);
}}
/**********************************************/
字符串的拼接:
字符串+数值=字符串
数值+字符串=字符串
如:str+10+20 ==str1020 而 10+20+str ==30str
"+" 和 "+=" 都被重载了,具有合并字符串的能力,相当于 String 类里的 concat();
运算:
算术运算: 加( +) 减(-) 乘( * ) 除( / ) 取余( % )
% 取余运算: 2%3=2 100%3=1
赋值运算符:
= += -= *= /= %=
(先运行完右边的,再跟左边的进行赋值运算;如 int i=10;i-=3*5;结果-5)
<<= >>=
比较、条件运算:
大于> 不小于>= 小于< 不大于<= 等于== 不等于 !=
逻辑运算:
短路运算(且 && 或 || ) 非短路运算(& | ) 反相 !
短路运算:当前面一个表达式可以决定结果时,后面的语句不用再判断。非短路运算时,还照样判断后面的
位运算:
&(AND) |(OR) ^(XOR异或) ~(补码)按位取反 = 加1再取反(全 1 的补码是-1)
移位运算:
>> << >>>
>>右移:全部向右移动,移到右段的低位被舍弃,最高位则移入原来最高位的值。右移一位相当于除2取商。
>>>同上,只是最高位移入0(不带符号)。因为最高位是符号位,所以负数跟 >> 有区别,正数没区别。
12>>>33 为12>>(33%32) = 12>>1 =6;因为int 型只有32位,认为全移走后就没意义
1 <<32 为1
instanceof():用户判断某一个对象是否属于某一个类的实例。
“==”双等于号,比较数值是否相等。还可以用于比较两个引用,看他们引用的地址是否相等。
在 Object 类里 equals() 跟“==”功能一样;但可以重载定义一个比较两者意义是否相等的方法。
在java里可以把赋值语句连在一起写,如: x=y=z=5; 这样就x,y,z都得到同样的数值 5
两个数相运算时,默认是 int 类型
如果有更高级的,就按高级的那个类型
if(其中一个是double型)double型;
else if(其中一个是float型)float型;
else if(其中一个是long型)long型;
else int 型。
选择:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -