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

面向对象3

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

面向对象3

static关键字

static关键字称为静态,static可以用来修饰类的属性,方法,代码块和内部类.

static的特点:

随着类的加载而加载,只有一份,类加载后就可以直接使用,在方法区存储.

优先于对象存在,先加载类,之后才创建对象.

被static修饰的成员被所有对象共有

可以不创建对象而直接被类调用

public class Chinese {
    String name;//未被static修饰的成员变量 随着对象的创建而创建 会被加载到对象内存中 每一个的值都是不同的
    int age;
    int ID;
    static String country = "中国";//被static修饰的变量 被加载在方法区 只有一份 对象可以引用 但不会被加载到堆中 值是固定的
​
}
​
public class ChineseTest {
    public static void main(String[] args) {
        Chinese zs = new Chinese();
        zs.name = "张三";
        zs.age = 19;
        zs.ID = 123456789;
        Chinese ls = new Chinese();
        ls.name = "李四";
        ls.age = 18;
        ls.ID = 123456798;
        System.out.println(zs.name);
        System.out.println(zs.country);
        System.out.println(ls.name);
        System.out.println(ls.country);//被static修饰的变量可以被对象调用
        System.out.println(Chinese.country);//被static修饰的变量可以用类直接调用
    }

被static修饰的变量 被加载在方法区 只有一份 对象可以引用 但不会被加载到堆中 值是固定的

未被static修饰的成员变量 随着对象的创建而创建 会被加载到对象内存中 每一个的值都是不同的

static可以修饰成员方法,修饰后的成员方法中只能访问静态的成员变量

静态方法也是随着类的加载而加载.

static不能用来修饰构造方法.

代码块

代码块在类中声明类似一个没有名字的方法,代码块分为实例块和静态块.

代码块在类中可以有多个.

实例块:每一次创建对象时都会被调用.

{

Java语句;

}

静态块:只在类加载的时候自动调用一次,与创建对象及创建对象的个数无关.

static {

Java语句;

}

实例代码块可以使用被静态修饰的变量 也可以使用非静态修饰的变量

静态代码块可以使用被静态修饰变量,但不能使用非静态修饰的变量 原因: 静态随着类的加载而加载 非静态是随着对象的加载而加载,静态的加载是随着类的加载而加载的,静态的加载先于非静态 静态代码块随着类的加载只加载一次

public class Demo {
    
    int a=1;
    static int b=2;
    
    {
        System.out.println("实例代码块1"+a);
    }
    {
        System.out.println("实例代码块2"+b);
    }
    
    static {
        System.out.println("静态代码块1");
    }
    static {
        System.out.println("静态代码块2"+b);
    }
​
    public class TestDemo {
    public static void main(String[] args) {
        new Demo();
        System.out.println(Demo.b);
        new Demo();
        System.out.println(Demo.b);
    }
      
  

类中的元素加载执行顺序

①先加载静态的,变量 代码块 方法等 按照从上向下的顺序执行

②成员变量

③实例代码块

④构造方法

⑤成员方法

包

包类似于文件夹,是为了更好的管理类,Java提供了包机制,用于区别类的命名空间(类地址).

全类名=包名+类的简称

包的作用:

①避免类名重复

包名的存在就是让我们根据不同的需求调用不同的类.

当你调用一个包的类时,需要导包在Java中使用import关键字进行导包,同包中使用时不需要导入.

注意:在Java中lang包(即language语言包)是默认的,可以直接使用不需要导入.

以Date为例,我们可以看到Java中不同的包中都有Date,当你的代码中需要使用多个包中的同名类时,不能同时导入所有的包,其中可以导入一个包,其他的相同类则需要使用全类名进行导入使用.

 

②便于根据不同的功能管理类

公共的功能

与数据库交互的功能

与前端交互的功能

③控制访问权限

使用不同的访问权限修饰符可以对包进行访问权限控制.

包的命名规范:

在包名中,可以使用.号来区分包的级别;包名一般情况下是小写

第一级 指该项目的类型,如com,org,gov等,

第二级 指项目所开发或者运行的公司名称,如:oracle,sun等

第三级 指项目的名称,如:bcms,oa,erp,cms等

第四级 指项目模块的名称,如:bean,action,exception等

访问权限修饰符

Java中有四个权限访问修饰符,权限从大到小依次为:

1)public :公共的 可以修饰类 属性 方法 可以被任意类访问

2)protected:受保护的 可以修饰 属性 方法 该类的子类

可以被同包类访问,如果不是同包类,必须是该类的子类才可以访问

3)default:默认的 可以修饰同包的类 属性 方法 只能被同包的类访问

4)private:私有的 可以修饰同类的属性 方法 只能在本类中访问

   
 package com.ffyc.zlp.javaoop.day1;
​
public class Demo1 {
    
    public int pubnum;
    protected int pronum;
    int num;
    private int prinum;
​
    public void test(){
        System.out.println(this.pubnum);
        System.out.println(this.pronum);
        System.out.println(this.num);
        System.out.println(this.prinum);
​
    }
​
}
​
package com.ffyc.zlp.javaoop.day1;
​
public class Demo2 {
    Demo1 Demo1 = new Demo1();
    public void test(){
        System.out.println(Demo1.pubnum);//公共的 可以被任意类访问
        System.out.println(Demo1.pronum);//可以被同包的类访问
        System.out.println(Demo1.num);//同包可以使用
        // System.out.println(Demo1.prinum);//私有权限,同包不同类不能使用
​
    }
}
​
package com.ffyc.zlp.javaoop.day2;
​
import com.ffyc.zlp.javaoop.day1.Demo1;
​
public class Demo3 extends Demo1 {
    com.ffyc.zlp.javaoop.day1.Demo1 Demo1 = new Demo1();
    public void test(){
        System.out.println(Demo1.pubnum);//公共的 可以被任意类访问
        //System.out.println(Demo1.pronum);//创建对象才能使用
        //System.out.println(Demo1.num);//默认权限 子类不能使用
        // System.out.println(Demo1.prinum);//私有权限,同包不同类不能使用
        Demo3 Demo3 = new Demo3();
        System.out.println(Demo3.pronum);//子类继承父类 protected可以被子类继承 不同包子类可用
    }
}
​

封装

封装就是将类的某些信息隐藏在类内部,不允许外部程序直接访问, 而是通过该类提供的方法来实现对隐藏信息的操作和访问.

我们在类中使用private关键字,使得同包中的其他类可以对使用了private的信息不能进行操作,但是我们可以通过编写一个方法只要符合条件就可以对被private修饰过的信息进行操作.

封装的好处:

只能通过规定的方法进行访问

隐藏类的实现细节

方便加入控制语句或者修改实现方法的条件.

                      

                     

                      

 

 

通过上边两张图片我们可以看到,使用了private关键字修饰的变量并不能在TestDemo4中被使用,编译器报错。

下图通过编译新的方法,将使用了private关键字修饰的变量可以被我们使用。

                              

 

 

 

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

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

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