Java面向对象2

Java面向对象2

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:MyEclipse 10  Java

作者:陈剑波

撰写时间:2019年05月09日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1、Java中的对象

一、创建对象

对象是根据类创建的,Java语言中使用new操作符调用构造方法创建对象。

创建步骤:

    声明:声明一个对象,包括对象名和对象类型。

    实例化:使用关键字new来创建一个对象,只是为对象在内存中开辟空间。

初始化:使用new创建对象时,会调用构造方法初始化对象,对象中的值赋初始值。

 

语法格式:

类名 对象名=new 类名();

 

访问对象的属性和行为:

/* 访问类中的变量 */

objName.variableName;

/* 访问类中的方法 */

 objName.methodName();

 

示例代码:

public class SimplePerson {

    //定义构造方法

    public SimplePerson() {

       

    }

    //定义成员变量

    String name;

    int age;

    //定义成员方法

    public void say(String text) {

        System.out.println(this.age + "岁的" + this.name+"说:\""+text+"\"");

    }

}

public class ClassDemo {

    public static void main(String[] args) {

        //创建一个对象

        //声明一个SimplePerson类型的变量

        SimplePerson simplePerson;

        //通过new关键字调用SimplePerson类的构造器,返冋一个SimplePerson实例

        //将该SimplePerson实例赋给simplePerson

        simplePerson=new SimplePerson();

        //创建另一个对象

        //可以简写为

        SimplePerson simplePerson2=new SimplePerson();

       

        //使用第一个对象调用类成员方法

        simplePerson.age=21;

        simplePerson.name="布罗利";

        simplePerson.say("我看一遍就掌握了Java");

       

        //使用第二个对象调用类成员方法

        simplePerson2.age=21;

        simplePerson2.name="卡卡罗特";

        simplePerson2.say("我早就学会了Java");

    }

}

 

运行结果:

21岁的布罗利说:"我看一遍就掌握了Java"

21岁的卡卡罗特说:"我早就学会了Java"

 

2、构造器的重载

构造名必须与类名相同。

构造器的重载:形参列表不同,它们的参数的数量不同或数量相同而类型和次序不同。

示例代码:

public class Test {

    int age;

    String name;

    //构造器的重载:形参列表不同

    //无参构造方法

    public Test() {

        this.age=21;

        this.name="艾泽";

    }

    //有参构造方法

    public Test(int age) {

        this.age=age;

        this.name="艾泽";

    }

    //有参构造方法

    public Test(String name) {

        this.age=21;

        this.name=name;

    }

    //有参构造方法

    public Test(int age,String name) {

        this.age=age;

        this.name=name;

    }

    //有参构造方法

    public Test(String name,int age) {

        this.name=name;

        this.age=age;

    }

}

 

3、成员变量和局部变量

成员变量指的是类范围里定义的变量,也就是属性;局部变量指的是一个方法内定义的变量。命名规则是单词首字母小写,后面的每个单词首字母大写。

Java中变量的分类  
 

Java面向对象2

成员变量:

成员变量被分为类变量和实例变量两种,定义一个变量是不使用static修饰的是实例变量,使用static修饰的是类变量。类变量,作为类的一个成员,与类共存亡。实例变量,作为实例的一个成员,与实例共存亡。

示例代码:

public class Person {

    //实例变量

    public String name;

    //类变量

    public static int age;

}

 

 

 

 

 

public class PersonTest {

    public static void main(String[] args) {

        //成员变量无须显式初始化,只要为一个类定义了类变量或实例变量,

        //则系统会在这个类的准备阶段或创建这个类的实例时进行默认初始化,

        //成员变量默认初始化时的赋值规则与数组动态初始化时数组元素的赋值规则完全相同。

        System.out.println("Personage类字段(field)值:"+Person.age+"\n");

        Person p = new Person();

        System.out.println("p变量的name 字段(field)值是:"+p.name+" "+"p对象的age 字段(field)值是:"+p.age+"\n");

        p.name="布罗利";

        p.age=22;

        System.out.println("p变量的name 字段(field)值是:"+p.name+" "+"p对象的age 字段(field)值是:"+p.age+"\n");

        System.out.println("Personage类字段(field)值:"+Person.age+"\n");

        Person p2 = new Person();

        System.out.println("p变量的name 字段(field)值是:"+p2.name);

        //类变量的作用域比实例变量的作用域更大:实例变量随实例的存在而存在,而类变量则随类的存在而存在。

        System.out.println("p2对象的age类字段(field)值:"+p2.age+"\n");

    }

}

 

 

运行结果:

Personage类字段(field)值:0

 

p变量的name 字段(field)值是:null p对象的age 字段(field)值是:0

 

p变量的name 字段(field)值是:布罗利 p对象的age 字段(field)值是:22

 

Personage类字段(field)值:22

 

p变量的name 字段(field)值是:null

 

p2对象的age类字段(field)值:22

 

局部变量:

根据定义形式的不同,分为三种:

形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效。

方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时消失。

代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义变量的生效,到该代码快结束时失效。

示例代码:

public class Test2 {

    // 定义一个方法

    public void test3() {

        // 在方法中定义一个局部变量a

//      int a;

        // 直接输出是输出不出来的,因为没有初始化

        // System.out.println(i);

        // 定义一个局部变量a并初始化

        int a = 20;

        // 输出a

        System.out.println(a);

    }

 

    // 定义一个静态的方法

    public static void test4() {

        int a = 20;

        System.out.println(a);

    }

   

    public static void main(String[] args) {

        Test2 t=new Test2();

            //定义在方法中的局部变量

            //调用方法

            t.test3();//结果:20

            //定义在方法中的局部变量,出了方法就不能被访问了

            //System.out.println(a);

           

            //定义在代码块中的局部变量

            {

                int b = 22;

                System.out.println(b);//结果:22

            }

            //定义在代码块中的局部变量,出了代码块就不能访问了

            //System.out.println(b);

           

            //定义在静态方法中的局部变量,出了方法一样不能被访问

            test4();//结果:20

//          System.out.println(a);

    }

}