Java零散知识


面向对象:

属性存在于堆内存的对象中;

局部变量存在于栈内存的方法中。


属性都有默认初始化值;

局部变量没有默认初始化值。


声明对象是在栈内存中开辟了一个空间,例如

Person  s;

实例化一个对象是在堆内存中开辟了空间,例如

Person s = new Person();


没有实体的对象称作空对象,空对象不能使用。


构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用普通成员方法去调用。

如果一个构造方法想调用另一个构造方法,需要使用“this(参数列表)”的形式来调用(注意:如果使用this调用构造方法,此语句必须是第一句)。例子见here


子类调用父类的构造方法:

使用关键字super来调用,而且super的使用必须是子类构造方法中的第一句。

例如:

class Father{
	int a;
	Father(int aa){
		a = aa;
	}
}
class Son extends Father{
	int b;
	String s;
	Son(int bb,String ss){
		super(bb);//必须第一句
		b = bb;
		s = ss;
	}
}



浅拷贝与深拷贝:

浅复制:仅仅复制所考虑的对象,而不复制它所引用的对象;

深复制:需要把所复制的对象所引用的对象都复制一遍。

其中clone方法如果不重写的话,默认的就是浅复制。


类变量(静态变量):

static只能用于修饰成员变量,而不能用于修饰局部变量;

静态变量存储在静态存储区,普通变量存储在堆内存中。

静态变量可以通过:ClassName.VariableName的方式访问。类变量被声明为public static final类型时,类变量名称必须使用大写字母。(from w3school)


static修饰的方法称为类方法或者静态方法,static方法不能访问非static变量和方法,也不能使用this、super等关键字(原因-->);

类方法可以通过类名调用,而实例方法必须通过对象调用。

简单例子:

import java.util.Scanner;
class Per{
	static int Add(int n){
		return n+1;
	}
	int Sub(int n){
		return n-1;
	}
}
public class Main {
	public static void main(String [] args){
		int p = Per.Add(5);
		Per s = new Per();
		int q = s.Sub(5);
		System.out.println(p + " " + q);
	}
}


程序中不一定有package语句,如果使用package语句,它必须是文件中除注释以外的第一句程序代码。
Java包的命名规则全部使用小写字母,包括中间的字也是如此。
Java可运行程序是是一组可以打包并压缩为一个Java文档文件(JAR,使用Java的jar文档生成器)的.class文件。


Java源代码文件,通常被称为编译单元(有时也称为转译单元)。每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同。每个编译单元只能有一个public类,否则编译器不会接受。


多态性
方法的多态性:方法的重载、方法的覆盖
类型的多态:子类是一种父类类型

使用多态运算符instanceof可以判断一个对象是否属于指定类及其子类,返回值boolean类型,例子:
Father f = new Father(5);
boolean flag = f instanceof Father;

父类对象能被赋值为子类对象,而子类对象不能赋值为父类对象。
例如:
Father f = new Son(5,"hh");
此时称对象f是子类对象Son的上转型对象,对象的上转型对象的实体是子类负责创建的,但是上转型对象会失去原对象的一些属性和功能    。

上转型对象:
上转型对象不能操作子类声明定义的属性;也不能使用子类声明定义的方法。即上转型对象不能操作子类新增的方法和属性(只能操作父类、子类都有的属性,而且实际调用的是父类的属性)。
上转型对象可以操作子类继承的属性和隐藏的属性,也可以使用子类继承或重写的方法。
可以将对象的上转型对象再强制转换到一个子类的对象,这时,该子类对象又具备了子类所有的属性和功能。

多态性:
一、编译时多态:
1.编译时就能确定执行同名方法中的哪个
2.方法的重载是编译时多态性
3.方法的覆盖两种都有可能
二、运行时多态性
1.只有在运行时才能确定执行同名方法中的哪个
2.当用上转型对象时是运行时多态性

抽象类
abstrac修饰的类称为抽象类,抽象类中的构造方法、类成员方法不能被声明为抽象方法
抽象方法只允许声明不允许实现,而且不能使用abstract和final同时修饰一个方法

抽象类中不能使用new运算符
做上转型对象


final类不能被继承,即不能有子类
final方法不能被重写
final类不可以包含final方法,非final类可以包含final方法


接口
接口是一组常量和抽象方法的特殊类
接口是引用数据类型
接口中的所有方法自动属于public,因此在接口中声明方法时,不必提供关键字public
接口中的属性被自动地设为public static final

如果一个类实现某个接口,那么这个类必须实现接口中的所有方法,即为这些方法提供方法体
接口可以被接口继承


接口和抽象类的相同点:
两者都包含抽象方法
两者都不能被实例化
两者都是引用数据类型,其变量可被赋值为子类或实现接口类的对象
接口和抽象类的不同点:
抽象类中可包括抽象方法和非抽象方法,但是接口中的所有方法都是抽象方法
接口中可以有常量,不能有变量(因为接口中的属性被自动地设为public static final);而抽象类中既可以有常量,又可以有变量
一般类只能扩展一个抽象类,但是可以实现多个接口(这个一定程度上弥补了Java中没有多继承的弊端)



javadoc命令可以将文档注释提取出来生成帮助文档

线程调用了notify()方法,线程进入就绪状态

ActionEvent的对象会被传递给actionPerformed()事件处理器方法

protected

如果一个类的成员被protected修饰,那么这个成员既能被同一包下的其他类访问,也能被不同包下该类的子类访问




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值