JavaSE(四)

JavaSE(四)

一、abstract 抽象类

  1. abstract和final不能联合使用,这两个关键字是对立的
  2. 抽象类的子类可以是抽象类
  3. 抽象类无法实例化,但是抽象类有构造方法,这个方法是供子类使用的
  4. 抽象类最大的作用就是降低实现类实现接口的难度(个人理解)
  5. 抽象类中不一定有抽象方法,但抽象方法必须在抽象类中
  6. 非抽象类继承抽象类,必须实现其抽象方法
//用abstract修饰的,没有方法体的方法,抽象方法
public abstract void doSome();

二、(面试题)java语言中没有方法体的方法不一定是抽象方法 ,例如:

//前面没有abstract修饰,有一个native,表示底层调用C++写的
//动态链接库程序,调用JVM本地程序
public native int hashCode();

三、interface 接口

  1. 接口中只包含常量和抽象方法
  2. public abstract可以省略
//public abstract int sum(int a,int b);
//省略public abstract
int sum(int a,int b);
  1. 接口中所有的元素都是public的,公开的
  2. 常量的public static final可以省略
  3. 实现接口需要implements关键字
  4. 接口和接口之间没有继承关系也可以强制类型转换,编译可以通过,但是运行时可能出现ClassCastException异常(除非实际内存中的对象是实现了这两个接口),还是要使用instanceof判断

四、类与类之间的关系

  1. is a 什么是一个什么,表示继承关系
  2. has a 什么有一个什么 表示关联关系,通常以属性的形式存在
  3. like a 什么像一个什么 表示实现关系,通常表示类实现接口

五、将class文件编译到当前目录下

DOS命令:javac -d . HelloWorld.java

  1. -d 带包编译
  2. . 表示表示编译生成的东西放到当前目录下

六、import

  1. import语句只能出现在package页语句之下,class声明语句之上
  2. 可以使用星号表示所有
  3. java.long.*下的类不需要导包

七、访问控制权限

访问控制权限本类同包子类任意位置
public(公开的)可以可以可以可以
protected(受保护的)可以可以可以不行
默认可以可以不行不行
private(私有的)可以不行不行不行

修饰接口和类只能是默认和public

八、toString

  1. 源码
public String toString(){
	//返回类的名字加@加地址的哈希值
	return getClass().getName()+"@"+Integer.toHexString(hashCode());
}

九、equals

  1. 默认采用的是“==”来判断两个java对象是否相等

十、finalize方法

  1. 源码
protected void finalize() throws Throwable{}
  1. System.gc();可以建议启动垃圾回收器

十一、hashCode()方法,计算对象内存地址的哈希值

十二、clone()方法

  1. 分为深克隆和浅克隆(现在不会)

十三、内部类(基本不用,降低代码可读性)

  1. 静态内部类(static)
  2. 实例内部类
  3. 局部内部类(方法中)
  4. 匿名内部类
class Test01{
	// main方法,入口
	public static void main(String[] args){
		// 调用MyMath中的mySum方法。
		MyMath mm = new MyMath();
		//并不是直接new了接口,而是创建了一个没有名字的实现类,并创建了对象
		//后面的{}代表了对接口的实现
		mm.mySum(new Compute(){
			public int sum(int a, int b){
				return a + b;
			}
		}, 200, 300);
	}
}
// 负责计算的接口
interface Compute{ 
	// 抽象方法
	int sum(int a, int b);
}
// 数学类
class MyMath{
	// 数学求和方法
	public void mySum(Compute c, int x, int y){
		int retValue = c.sum(x, y);
		System.out.println(x + "+" + y + "=" + retValue);
	}	
}

十四、数组

  1. 直接传递静态数组
printArray(new int[]{1,2,3})
  1. 数组扩容是先新建一个大容量的数组,然后将小容量数组中的数据一个一个拷贝到大容量数组中,效率比较低
int[] src = {1,2,3,4,5};
int[] dest = new int[10];
//第一个0是源的起点下标,第二个0是目标的起始下标,第五个参数是拷贝多长
System.arraycopy(src,0,dest,0,src.length);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值