教材:《Java核心技术 卷1:基础知识》Cay S.Horstmann
体系结构中立 可移植性
方法=method 特指类内部的函数function
对象=object
类=class
命令行编译运行:
javac new1.java
生成class文件
java new1
运行
或IDE运行
文档 在线版
package declaration 声明包
import xxx 导入
class definitions 定义类
源文件名与public类名相同(同一源文件中仅有一个public类)
变量声明后需要初始化
final
声明常量
±*/% ++ – = += -= > < == !=
&&短路与 ||短路或 &与 |或
位运算:只适合整型 ~非 &与 |或 ^异或 <<左移 >>右移 (符号位填充高位)>>>右移(0填充高位,对负数来说结果不同)
自动转换
自动提升 小范围->大范围
强制转换,如double->int 用(int)
String转其他:Integer.parseInt(str)
Double.parseDouble(str
)等
其他转String: n+""
或者String.valueOf(n)
或者(String)n
内容不可更改的字符串(指的是可以往后append,但不能修改已有的某一个字符)
String str=new String("abc")
内容可更改的字符串:StringBuffer,StringBuilder
串连接:+
或String.join("1","2")
子串 s.substring(start,end) [start,end)
length()
charAt(n)
,indexOf('e')
equals()
equalsIgnoreCase()
注意相等判断不能用==
s.append(str)
s.insert(pos,str)
s.delete(start,end)
s.reverse()
选择 if
switch
循环 for
while
do-while
中断 break
continue
for-each 循环
for(Employee e:staff)e.raise();
一维数组
int []arr=new int[n];
声明、创建。创建后不能修改大小。
自带arr.length
数组长度
Arrays.sort(arr[,start,end])
排序
更多函数参见java.util.Arrays
二维数组
int [][]arr
支持不规则数组
import java.math.BigInteger/BigDecimal
BigInteger a=BigInteger.valueOf(100);
BigInteger b=new BigInteger("12324342");
BigInteger c=a.add(b);
c=a.multiply(b);
class ClassName{
private int a;
public ClassName(){};//构造方法 没有返回类型 不能直接引用
method
}
ClassName c1=new ClassName();
类中的方法可以访问该类中定义的所有成员变量(java特性)
static:
Math.pow(4,6)
main方法为主程序入口
用static修饰,没有创建对象也可使用,String []args由命令行给定
构造函数:系统有默认构造函数,但如果定义了含参构造函数,就不会提供,需要自行定义无参构造函数。可用this(表隐式参数)区分参数和当前对象成员。在构造方法中调用其他重载构造方法,必须在第一行。
类中可包含代码块,只要构造对象,即执行代码块;还有静态代码块,不包含在任何方法中,用static{}描述,仅执行一次。
调用方法时,基本数据类型只传值,引用数据类型可改引用对象内部的值,不会修改引用
包名小写,建议为反序的Internet域名
导入的多个包中存在同名类->使用类时需要加包名
导入静态方法和类变量,使用时无需包名
jar cvf 文件名 file1 file2 //压缩
jar xvf 文件名 //解压
IDE中可一键压缩
一般在要注释代码之前写注释
标记:
抽取包、公有类和接口、public&protected方法、成员变量的注释,可生成HTML文档,其中的标记也会被抽取形成规范的格式。由于一般发送class文件而非Java源代码,因此该文档可供他人参考使用你的包
javadoc -d docDirectory nameofPackage
javadoc -d docDirectory filename
包名:全小写
类名、接口名:每个单词首字母大写
变量名、方法名:驼峰命名法
常量名:全大写
extends 父类名
final
(类、方法、变量,变量是常量)父类引用变量可以引用子类对象,也就是子类是特殊的父类,赋值、传参时可发生自动转换,但反之必须强制转换,而且要确保转换对象是子类对象
测试是否为某类或某类子类对象:instanceof
Employee m=new Manager();
if(m instanceof Manager)n=(Manager)m;
声明类型≠实际类型不同,由此出现动态绑定,运行过程中根据引用变量的实际类型调用相应的方法
abstract
可以引用所有的对象
public String toString();
返回 “类名@内存地址”,一般会覆盖重写,实现为“类[成员变量值1,成员变量值2]"
public boolean equals(Object obj);
比较是否有相同的引用,一般重写。注意传参的类型必须是Object,进来以后在方法内部进行强制转换
public int hashCode();
返回哈希码,默认的为对象的存储地址,如果重写了euqals,则此方法必须重写,需要组合多个哈希值时,可使用Object.hash()对各个参数调用hashCode方法,并组合这些哈希值
public interface 接口名 [extends 接口列表]{
返回类型 方法名//隐含为public abstract
常量类型 常量名;//隐含为public static final
}
用类实现接口:
class A implements Comparable
public interface Actionlistner{
void actionPerformed(ActionEvent event);
}
public Timer(int delay,ActionListener listener);
ActionListener listener =new Timeprinter();
Timer t =new Timer(1000,listener);
t.start();
obj.clone()
为浅克隆,引用同一个子对象
重写可实现深克隆,实现标记接口Cloneable,先对父类克隆,然后对子类中的其他成员变量克隆
不过标准类库里实现克隆的非常少
容器:JFrame(顶层窗口),JPanel
基本组件:一大堆
此处学习了lambda表达式,非常之好,看看这个让你秒懂的Lambda表达式超级详细讲解