栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java——面向对象(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java——面向对象(二)

目录

1. 对象与引用

1.1 对象

1.2 值传递和引用传递

1.2.1 值传递(基本类型)

1.2.2 引用传递(引用类型)

2. this关键字

3. static关键字(静态)

4. 代码块

4.1 实例代码块

4.2 静态代码块

4.3 类什么时候加载

5. 包(package)

6. 访问权限修饰符


1. 对象与引用

1.1 对象

以Car类为例:

Car   bm =  new  Car();

new Car() :   以Car类做为模板,调用Car类的构造函数,在堆空间里创建一个Car类对象

Car  bm:  创建了一个Car类的引用变量,

=  : 使对象引用指向刚创建的那个Car对象

Car bm; bm= new Car();

有两个实体:一是对象引用变量,一是对象本身。

对象好比是一只很大的气球,但是我们抓不住它。

引用变量是一根绳,可以用来系汽球。

Car car1;              (1)创建一根绳子,一根还没有系上任何一个汽球的绳;

Car car2;              (2)就又做了一根绳,还没系上汽球,

car1 = new Car(); (3)给car1 系上气球;

car2 = car1 ;      (4)这里,发生了复制行为。

要说明的是,对象本身并没有被复制,被复制的只是对象引用。

结果是,car2也指向了car1所指向的对象。两根绳系的是同一只汽球。

1.2 值传递和引用传递

注:严格来说传递只有值传递一种

1.2.1 值传递(基本类型)

方法调用时,实际参数把它的值传递给 对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是 两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

1.2.2 引用传递(引用类型)

传地址。方法调用时,实 际参数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形 式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下 来,所以方法执行中形式参数的改变将会影响实际参数
 

public class Demo {
   //引用类型 在传递时,传的是对象的地址
    public static void main(String[] args) {
        Demo d = new Demo();
        Person zs = new Person("张三", 20);
        d.test(zs);
    //只是把对象的地址传递给了 p
        System.out.println(zs.name);//李四
    }
    //p和zs指向的是同一个对象
    public void test(Person p){ 
          p.name = "李四";
    }
}

2. this关键字

格式:this.成员变量名

表示正在操作的对象,在成员方法,构造方法中使用成员变量,使用this调用

在一个类的方法或构造方法,可以使用“this.成员变量名”这样的 格式来引用成员变量名,常常用来区分同名的成员变量和局部变量。

public class Person {
      //成员变量
      public String name;
      int age;
      //构造方法
      public Person(){
      }
      public Person(String name,int age){
            this.name=name;
            this.age=age;
      }
      //成员方法   哪个对象调用show方法,那么name,age就是哪个对象中的属性
      //this 表示当前正在操作的对象  在成员方法,构造方法中使用成员变量,使用this调用.
      public void show(){
          System.out.println("姓名:"+this.name+" 年龄:"+this.age);
      }
}

3. static关键字(静态)

概念: 可用来修饰属性、方法、代码块、内部类。

  • 类变量,和类一样只有一份。
  • 被static修饰的内容,随着类的加载而加载。
  • 优于对象存在
  • 被所有对象共享,可以通过类名直接调用
//常量,共有属性一般修饰为static
public class Person {
    String name; //name属性不建议修饰为static,在内存中只有一份,而name每个对象都不一样。
    int age;
    static String country = "China";
    public void show(){
        this.name = name;
        this.age = age;   //非静态方法可以使用静态变量,且非静态方法必须通过
//对象来对调用,对象加载之前先加载类。
        System.out.println(country);
    }
    //静态方法不能使用非静态的成员变量,静态资源随着类先加载,非静态的随着对象的创建而加载
    public static void test(){
//        System.out.println(name); 错误,static修饰的内容会随着类的加载而加载,
//静态方法不能直接调用非静态的成员变量
        country = "English";
        System.out.println(country);
    }

    public static void main(String[] args) {
        Person ps1 = new Person();
        ps1.name = "张三";
        ps1.age = 20;
        ps1.show();
        Person ps2 = new Person();
        ps2.name = "李四";
        ps2.age = 21;
        Person.country = "中国";
        ps2.show();
        Person.test(); //静态方法,静态变量建议使用类名调用
    }
}
  1.  静态方法不能使用非静态的成员变量,静态资源随着类先加载,非静态的随着对象的创建而加载。
  2. 非静态的随着对象的创建而加载。
  3. 非静态方法可以使用静态变量,非静态方法必须通过对象来调用,对象创建之前先加载类。

4. 代码块

概念:类似一个没有名字的方法。

分类:实例代码块和静态代码块。

4.1 实例代码块

{

  // java的任何合法代码

}

创建对象后执行。

在创建对象后执行,调用构造方法之前执行,每创建一次对象,执行一次。

4.2 静态代码块

static{

// java的任何合法代码

}

在类加载时候执行(只执行一次),多个静态按先后顺序执行。(与是否创建对象无关)

4.3 类什么时候加载

main方法在那个类中执行,这个类就加载,创建某个类的对象,调用某个类中的静态属性,方法。

public class DaiMaK {
    static int age = 20;
    public DaiMaK(){
        System.out.println("无参的构造方法");
    }
    String name;
    {
        System.out.println("实例代码块");
    }
    static{
        System.out.println("静态代码块1");
    }
    static{
        System.out.println("静态代码块2");
    }
    public void show(){
        System.out.println("成员方法");
    }
    public static void Person(){
        System.out.println("静态的成员变量");

    }

    public static void main(String[] args) {
        new DaiMaK();
        new DaiMaK();
        new DaiMaK().show();
        DaiMaK.Person();
    }

结果: 

5. 包(package)

定义:为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。

注:是类路径中的一部分地址

作用:

1. 避免类重名

2. 按功能管理分类

第一级项目名称com(商业)、org(组织)、edu(教育)、gov(政府)
第二级公司名称sun,huawei等
第三级项目名称bcms,oa,erp,cms等
第四级功能模块

窗口/视图层、数据访问层、服务层、工具类、细分子模块

3. 控制访问权限

注:使用import导入其他包中的类

 java.unit.Date    类的全类名                         Date  简称

同一类名简称只能导入一次

例:new Date();

       new java.sql.Date(1000);

6. 访问权限修饰符

定义:用来修饰类、成员方法、成员变量、内部类、控制对其访问的权限

访问权限和包是密切相关的。

 public(公共的)     类、成员变量、方法、内部类。   

在任何类中都可以访问

 protected(保护的)   成员变量、方法、内部类   

在不同包的子类中,可以访问protected

  (default)(默认的 无)   类、成员变量、方法、内部类

只能被同包的类访问

  private(私人的)       成员变量、方法、内部类

私有权限只能在自己类中访问,同包的其他类也不能访问;

在同包的其他类中,只能访问public、protected、default。

publicprotecteddefaultprivate
同类      √       √      √      √
同包      √       √      √
不同包子类      √       √   
不同包不同类      √     

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434336.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号