Java基础知识001

public static void main(String [] args)

1、JVM在运行程序时会首先查找main方法,由于main是程序的入口方法,此时还没有实例化对象,因此必须用public static修饰(二者位置可以互换),且要保证返回值类型为void。
虽然每个类都可以定义main方法,但只有与文件名相同的用public修饰的类中的main方法才能作为整个程序的入口方法。

2、如何实现在main方法执行前输出“hello world”?

  静态块在类加载时就会被调用,因此可以在main方法执行前,利用静态块输出hello world

3、Java程序初始化顺序

当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化之后,才会调用对象所在类的构造函数创建对象。

  • 静态对象/变量优先于非静态对象/变量初始化(静态只初始化一次,非静态可能初始化多次)
  • 父类优先于子类初始化
  • 按照成员变量定义的顺序进行初始化。即使变量定义散布于方法定义之中,他们依然在任何方法包括构造函数调用之前先初始化。

初始化工作执行顺序
父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数

4、JAVA变量类型

成员变量、静态变量和局部变量
类的成员变量与类的实例化对象作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量的生命周期才结束。
静态变量不依赖于特定的实例,而是被所有实例共享,只要一个类被加载,JVM就会给类的静态变量分配存储空间。
局部变量的作用域在它所在的花括号内。
成员变量的四种作用域:
pubic:表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问;
private:只有当前类具有访问权限,除此之外的其他类或者对象都没有访问权限
protected:对自己和子类、同一包内的类可访问,除此之外的其他类或者对象都没有访问权限。
default:只有自己和其位于同一包内的类可见,若父类与子类位于不同包内,则没有访问权限。
只有public abstract或final可以修饰类,private与protected不可以,没有修饰符情况下默认为default。
一个java文件可以定义多个类,但是最多只能有一个类被public修饰,并且这个类的类名与文件名必须相同。

5、构造函数

构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量。
构造函数特点:
1、必须与类的名字相同,不能有返回值(返回值也不能为void)
2、每个类可以有多个构造函数。若没有提供构造函数,编译器会提供一个默认的构造函数;若已经提供构造函数,编译器则不会再创建默认构造函数。
3、构造函数总是伴随着new操作一起调用,且不能由程序的编写者直接调用,必须要由系统调用。构造函数在对象实例化时会被直接调用,且只运行一次;而普通的方法在程序执行到它时被调用,且可以被该对象调用多次。
4、构造函数的主要作用是完成对象的初始化工作。
5、构造函数不能被继承,因此它不能被覆盖,但是构造函数能够被重载,可以使用不同的参数个数或参数类型来定义多个构造函数。
6、子类可以通过super关键字显式调用父类构造函数,当父类没有提供无参数的构造函数时,子类的构造函数必须显式的调用父类的构造函数。如果父类提供了无参数的构造函数时,子类的构造函数可以不显式的调用父类的构造函数,在这种情况下编译器会默认调用父类提供的无参数的构造函数。当有父类时,在实例化对象时会先执行父类的构造函数,然后执行子类的构造函数。
7、当父类和子类都没有提供构造函数时,编译器会为子类和父类分别提供一个默认的无参数构造函数。默认构造函数的修饰符与当前类的修饰符一样。
普通方法可以与构造函数有相同的方法名。

6、接口

Java不支持多重继承,即一个类只能有一个父类,但是一个类可以实现多个接口。
接口只包含方法的定义,没有方法的实现;接口中成员的作用域修饰符为默认public,在类中实现该方法时需要显式提供public;常量值默认使用public static final修饰;
一些接口内部没有声明任何方法,这种接口称为标识接口,用来表明实现它的类属于一个特定的类型。经常使用instanceof判断实例对象的类型是否实现了一个给定的标识接口。
private static protected均不能用来修饰接口。

7、JAVA中clone方法的作用

Java中在处理基本数据类型时都是采用值传递,除此之外的其他类型都是按引用传递(传递的是对象的一个引用),在使用=赋值时也采用引用传递。然而当遇到从某个已有的对象A创建出另外一个与A具有相同状态的对象B,并且B的修改不会影响到A的情况,上述赋值操作无法完成。clone()方法可以满足该需求。
Java中所有的类都默认继承自Object类,而Object类提供了一个clone方法。这个方法的作用是返回一个Object对象的复制。这个复制函数返回的是一个新的对象而不是一个引用。使用clone方法的步骤:

  • 实现clone的类首先需要继承Cloneable接口。Cloneable接口实质上是一个标识接口,没有任何接口方法。
  • 在类中重写Object类的clone方法。
  • 在clone方法中调用super.clone()。无论clone类的继承结构是什么,super.clone()都会直接或间接调用java.lang.Object类的clone方法。
  • 把浅复制的引用指向原型对象新的克隆体。
class Obj implements Cloneable{
	private int aInt=0;
	get方法
	set方法
	public void changeInt(){
		this.aInt=1;
	}
	public Object clone(){
		Object o=null;
		try{
			o=(Obj) super.clone();
		}catch(CloneNotSupportedException e){
			e.print.......
		}
		return o;
	}
}
public Test{
	public static void main(String[] args){
			Obj a=new Obj();
			Obj b=(Obj)a.clone();
			b.changeInt();
			输出a.getInt()值为0;
			输出b.getInt()值为1;
	}
}

但是上述操作仅能完成对基本类型的复制,当类中包含一些对象时,需要用到深复制。

class Employee implements Cloneable{
	public Employee clone() throws CloneNotSupportedException{
	//编译器不知道Employee实现了Cloneable接口,因此需要声明异常
		Employee cloned=(Employee) super.clone();
		cloned.hireDay=(Date)hireDay.clone();
		return cloned;
	}
}

protected特性:
若希望超类中的某些方法允许被子类访问,或允许子类的方法访问超类的某个域。可以将这些方法或域声明为protected。例如:如果将超类Employee中的hireDay声明为protected,而不是私有的,Manager中的方法就可以直接访问它。但是注意:Manager类中的方法只能访问Manager对象中的hireDay域,而不能访问其他Employee对象中的这个域。
在Object类中的clone方法被声明为protected,子类只能调用受保护的clone方法克隆它自己,(即只有User类里面才能“克隆”user对象),默认的克隆操作是浅拷贝,他并没有克隆包含在对象中的内部对象,为此必须重新定义clone方法,并将它声明为public,这样才能够让所有的方法克隆对象。

**浅复制:**被复制对象的所有变量都含有与原来对象相同的值,而所有对其他对象的引用仍然指向原来的对象。
**深复制:**被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量都将指向被复制的新对象,而不是原有的那些被引用的对象。

8、反射机制

反射机制的主要功能:

  • 得到一个对象所属的类;
  • 获取一个类的所有成员变量和方法;
  • 在运行时创建对象
  • 在运行时调用对象的方法

重要作用:在运行时动态地创建类的对象。

获取Class类的方法:

  • class.forName(“类的路径”)
  • 类名.class
  • 实例.getClass()

Java创建对象的方式:

  • 通过new语句实例化一个对象
  • 通过反射机制创建对象 (Class类有newInstance()方法)
  • 通过clone方法创建一个对象
  • 通过反序列化的方式创建对象

9、Package作用

  • 提供多层命名空间,解决命名冲突。使得处于不同package的类可以具有相同的名字
  • 对类按功能分类

回调函数?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值