zoukankan      html  css  js  c++  java
  • 动手动脑3

      类构造函数:一般再不写构造函数时系统会自动生成一个构造函数,但是一旦有了构造函数,系统将不会自动生成构造函数,并且只有自己书写的构造函输。例如:你书写了一个有参数的构造函数,那么系统只会选择这个有参数的构造函数,在类实例化时,只能调用这个方法。下面这个代码会报错,就是这个原因。

      

    public class Text{
    
        public static void main(String[] args) {
            Foo obj1=new Foo();
        }
    }
    class Foo{
        int value;
        public Foo(int vaulte) {
            value=vaulte;
        }
    }

      关于类初始化块和定义时的初始值要看哪一个在前面,他会按顺序来进行执行,其中的值则会是最后一个进行赋值。但是有构造函数的级别是最高的。其中的结果是构造函数赋值的

    package lianxi;
    
    import java.util.Scanner;
    
    public class Text{
    
        public static void main(String[] args) {
            Foo obj1=new Foo();
            System.out.println(obj1.filed);
            Foo obj2=new Foo(300);
            System.out.println(obj2.filed);
        }
    }
    class Foo{
        
        public int filed=100;
        {
            filed=200;
        }
        public Foo(int vaulte) {
            filed=vaulte;
        }
        public Foo() {}
    }

      类的初始化块是先将静态的初始化块全部执行完,再执行父类的普通初始化块在进行父类的构造函数,在进行子类的普通初始化块和子类的构造方法。

    package lianxi;
    
    public class App7 {
        public static void main(String[] args) 
        {
            new Leaf();
        }
    }
    class Root
    {
        static{
            System.out.println("Root的静态初始化块");
        }
        {
            System.out.println("Root的普通初始化块");
        }
        public Root()
        {
            System.out.println("Root的无参数的构造器");
        }
    }
    class Mid extends Root
    {
        static{
            System.out.println("Mid的静态初始化块");
        }
        {
            System.out.println("Mid的普通初始化块");
        }
        public Mid()
        {
            System.out.println("Mid的无参数的构造器");
        }
        public Mid(String msg)
        {
            //通过this调用同一类中重载的构造器
            this();
            System.out.println("Mid的带参数构造器,其参数值:" + msg);
        }
    }
    class Leaf extends Mid
    {
        static{
            System.out.println("Leaf的静态初始化块");
        }
        {
            System.out.println("Leaf的普通初始化块");
        }    
        public Leaf()
        {
            //通过super调用父类中有一个字符串参数的构造器
            super("Java初始化顺序演示");
            System.out.println("执行Leaf的构造器");
        }
    
    }

       静态方法内只能调用静态的成员或变量,但是有两种方法可以调用非静态成员函数或变量。第一种通过匿名类可以调用一些非静态的成员和方法,但是匿名类只能调用一个语句超出之后,就会找不到,该类的地址无法调用。第二种是将类进行实例化,在进行相关做法的执行。

      

    源代码:

    public class App7 {
        public static void main(String[] args) 
        {
            Root r=new Root();
            System.out.println(new Root().str);
            new Root().function();
            System.out.println(new Root().str="改变的成员变量");
            System.out.println(r.str);
            new App7().fun();
        }
        public void fun() {
            System.out.println("本类中的非静态方法");
        }
    }
    class Root
    {
        public String str="成员变量";
        public void function(){
            System.out.println("成员方法");
        }
    }

      

  • 相关阅读:
    DS博客作业03--栈和队列
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    DS博客作业08--课程总结
    DS博客作业07--查找
    DS博客作业06--图
    DS博客作业05--树
    DS博客大作业--树 (陈梓灿组)
    DS博客作业03--栈和队列
  • 原文地址:https://www.cnblogs.com/huan-ch/p/9826079.html
Copyright © 2011-2022 走看看