1.java代码的运行顺序
在继承关系中的顺序:
class show{
public show(){
System.out.println("1");
}
public static void main(String[] args) {
test tmp=new test();
}
{
System.out.println("2");
}
static {
System.out.println("3");
}
}
class test extends show{
public test(){
System.out.println("4");
}
public static void main(String[] args) {
test tmp=new test();
}
{
System.out.println("5");
}
static {
System.out.println("6");
}
}
out:
3
6
2
1
5
4
无继承中的顺序:
class test {
public test(){
System.out.println("4");
}
public static void main(String[] args) {
test tmp=new test();
}
{
System.out.println("5");
}
static {
System.out.println("6");
}
}
out:
6
5
4
2.修饰符abstract、static和final
abstract:
(1)abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型(见后面实例),也就是编译时类型。抽象类就相当于一类的半成品,需要子类继承并覆盖其中的抽象方法。
(2)abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明而没有实现,需要子类继承实现。
abstract class biont{
private int age;
private int sex;
public biont(int sex){
age=0;
this.sex=sex;
}
public void addAge(){
age++;
}
}
class car extends biont{
private int color;
private String name;
public car(int sex) {
super(sex);
}
}
class test {
public test(){
}
public static void main(String[] args) {
//biont tmp=new biont();//不能实例化
car tmp=new car(1);
}
}
static:
static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。
package teststatic;
class myMath{
static double Pi=3.1415926;
static void println(){
System.out.print("\n");
}
}
public class testStatic {
public static void main(String[] args) {
System.out.print("myMath.Pi is ");
myMath.println();
System.out.print(myMath.Pi);
}
}
final:
final数据/类:abstract class biont{
private int age;
private int sex;
public biont(int sex){
age=0;
this.sex=sex;
}
final public void addAge(){
age++;
}
}
final class car extends biont{
private int color;
private String name;
public car(int sex) {
super(sex);
}
}
class test {
public test(){
}
public static void main(String[] args) {
car tmp=new car(1);
}
}
final数据:
package teststatic;
class myMath{
final double Pi=3.1415926;
public void printPi(){
System.out.print(Pi);
}
}
public class testStatic {
public static void main(String[] args) {
myMath p=new myMath();
System.out.print("myMath.Pi is ");
p.printPi();
}
}
3.单例模式
class printer{
private static final printer output=new printer();
private printer(){
}
protected void finalize(){
}
public static printer OnInit(){
return output;
}
}
class test {
public test(){
}
public static void main(String[] args) {
printer n=printer.OnInit();
printer m=printer.OnInit();
if(n==m)System.out.print("same");
else System.out.print("diff");
}
}
out:
same