Java随记

静态代码块

// 在类第一次创建的时候使用且仅使用一次
//静态代码块优先于构造函数
static {
	/*代码块内容*/
}

继承

继承变量区分

局部变量:直接写
子类变量:this
父类变量:super
父类构造函数只能被子类构造函数使用,且只能使用一个,且必须在子类构造函数第一行
成员变量不能覆盖重写(只有方法可以)

继承关键字

类继承:extends(单继承)
接口继承:implements(多继承)
接口继承接口:extends

继承抽象函数的实现

若未实现父类(接口)全部抽象方法,子类也应当为抽象类

覆盖重写

覆盖函数子类返回类型【(类的继承)小于等于】父类返回类型
覆盖函数子类访问权限【大于等于】父类访问权限

@Override//检测是否覆盖
public 	String GetSth(){
	return null;
}

接口

Java 7:常量、抽象方法

public interface A{
	public static final int NUM_OF_A = 10;//public static final任意
	//static final int NUM_OF_A = 10;
	//final int NUM_OF_A = 10;
	//int NUM_OF_A = 10;
	//final修饰常量
	
	public abstract void FunctionA();//public abstract任意
	//public void FunctionA();
	//abstract void FunctionA();
	//void FunctionA();
}

Java 8:新增默认方法、静态方法

public interface A{	
	public default void FunctionB(){
	//可省略public
	//解决接口升级问题
	//添加默认方法后子类可直接使用,无需修改子类
	//子类也可覆盖重写默认方法
	}
	
	public static void FunctionC(){
	//可省略public
	//无法通过子类对象调用,通过接口名调用
	}
}

Java 9:新增私有方法

public interface A{
	private void FunctionA(){
	//private不可省略
	//解决接口中代码复用问题
	}	
}

接口无静态代码块、构造方法
多继承接口时重复的方法只覆盖重写一个即可
多继承接口时重复的默认方法,实现类必须覆盖重写
若父类和接口的方法冲突,优先使用父类方法
接口多继承(extends)接口,出现默认方法冲突,需覆盖重写(同样包含default)

多态

//Java
public class B{
	public int num=10;
	public void Show(){}
}

public class A extends B{
	public int num=20;
	public void Show(){}
}

B b = new A();
b.Show();//调用子类A的Show()
int n = b.num;//使用父类B的num
//C#
public class B
{
	public int num=10;
	public void Show(){}
}

public class A:B
{
	public int num=20;
	public void Show(){}
}

B b = new A();
b.Show();//调用父类B的Show()
int n = b.num;//使用父类B的num

类向下转型

if(Person instanceof Student){
	//instanceof返回bool值
}

final关键字

//修饰类
public final class A{
	//该类不能被继承,但是可以继承于其他类
}

//修饰方法
public class A{
	public final void Show(){
	//该方法不能被覆盖重写
	//final不能月abstract同时使用(意义矛盾)
	}
}

//修饰局部变量
final int n;
n = 10;//仅能赋值一次
final A = new A();//A指向的地址不能变,但该地址指向的类的内容可以变

//修饰成员变量
public class A{
	private final int num = 10;//直接赋值或者构造函数赋值,二选其一,仅能赋值一次
	
	public A(){
	//num = 10;
	}
}

权限修饰符访问

publicprotecteddefault(不写)private
同一个类YYYY
同一个包不同类YYYN
不同包子类YYNN
不同包非子类YNNN

内部类

public class A{
	int num = 10;
	public class B{
		//内部类
		int num = 20;
		public void Show(){
		int num = 30;
		int n1 = num;//30
		int n2 = this.num;//20
		int n3 = A.this.num;//10
		}
	}
}

A.B ab = new A().new b();//定义对象

泛型

//泛型类
public class A<E>{
	//E只是个代表泛型的变量
}

//泛型方法
public <T> void Show(){
	//T只是个代表泛型的变量
}

//泛型接口
public interface B<E>{
	//E只是个代表泛型的变量
}

//泛型通配符:?
//只能用于接收不确定的类型,不能用于创建
//? extends E:只能使用E类的子类或E类本身
//? super E:只能使用E类的父类或E类本身

Socket

服务器端(ServerSocket)无法创建IO流,使用客户端的IO流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值