JAVA面向对象编程(访问控制)

本文介绍了Java中的包概念,使用package关键字避免命名冲突。详细讲解了访问修饰符public、protected、默认和private的访问范围,并探讨了封装原则。此外,还阐述了static和final的用法,包括静态变量、静态方法和常量的定义。最后,通过三个示例展示了创建Java窗体的三种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

访问控制

1.包的概念

package语言

  • 在java中使用package关键字区别同名的类

  • package的目的:解决命名冲突问题

  • 包语句必须写在java文件的开头

  • 格式如下:

    package com.baidu.www.day01;//指定包名,不同的包名可以存着同名的类
    //命名规则倒序命名法
    
  • java.lang包下的所有类不用导包

  • 常见的java包

    java.math 数学运算

    java.io io包

    java.utils 集合等

    java.net 网络编程

    java.sql 数据库

import语句

import java.util.Scanner //导入java.util.Scanner包,可以是用*通配符

2.访问修饰符

修饰符本类同一个包中的类其它包的子类其它包的其它类
public可以访问可以访问可以访问可以访问
protected可以访问可以访问可以访问不能访问
默认可以访问可以访问不能访问不能访问
private可以访问不能访问不能访问不能访问
  • 类的访问修饰符:public 和 默认的

    一个java文件中只能有一个public 修饰的类

    类的修饰词只有:final、abstract、public、默认的

  • 内部类的修饰可以使用任意修饰词

封装

  • 隐藏对的的属性和实现细节,仅对外公开接口。

  • 将属性私有化,提供供外部访问的公共接口(set和get方法)

    public abstract class User {
        private String name;
        private String password;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    

static和final

Static

  • static修饰成员变量

    可以直接通过 类名.属性名 直接访问

    属性将不在属于对象了,而是用于描述类

    static 修饰的成员变量存储在方法区中,且独一份。所以他不会随着对象的创建而创建

    public class TestStatic {
        static int age = 0;//存储在方法区 且独一份
        int score = 0;
        public TestStatic() {
            age += 1;
            score += 1;
        }
        public static void main(String[] args) {
            new TestStatic();//age : 1 score : 1
            new TestStatic();//age : 2 score : 1
            System.out.println(TestStatic.age);//2
            System.out.println(new TestStatic().score);//score : 1 age:3
        }
    
image-20220405163702581
  • static修饰成员方法

    ​ 访问:类名.方法名

    ​ 静态方法中不可以访问非静态成员。

  • static 块–作用就是加载静态资源

    ​ 结构:static{ } 非静态代码块:{ }

  • 类的加载机制

    ​ 执行顺序:静态代码块 > 代码块 > 构造方法

    ​ !!!当有static修饰的内容,会在类加载时就执行

final

  • final修饰类

    ​ 不能被继承 --> 防止滥用继承

  • final修饰方法

    ​ 不能被重写

  • final修饰变量

    ​ 不能不改变

    ​ 赋值方式:

    ​ 声明时赋值

    ​ 可以分开赋值,通过构造方法赋值

  • static final修饰常量

    ​ static final修饰的量为常量

    ​ 声明方式:声明时初始化

    ​ 命名方式是全大写,且单词之间用 “_” 隔开

    ​ 常量在编译时,会直接使用常量值替换常量

案例-窗体创建的三种方式

  • 第一种:

    import javax.swing.*;
    import java.awt.*;
    
    /**
     * 我的第一个窗体  main里面写所有
     */
    public class MyFirsrJFrame {
        public static void main(String[] args) {
            //JFrame:窗体类
            JFrame jf = new JFrame();
            //1.窗体的标题
            jf.setTitle("My first Jframe");
            //获取屏幕的宽
            int width = Toolkit.getDefaultToolkit().getScreenSize().width;
            //获取屏幕的高
            int heigt = Toolkit.getDefaultToolkit().getScreenSize().height;
            //定义窗体的宽
            int jfWidet = 400;
            //定义窗体的高
            int jfHeight = 600;
            //计算水平居中x初始坐标
            int jframeX = width / 2 - jfWidet / 2;
            //计算垂直居中y初始坐标
            int jframeY = heigt / 2 - jfHeight / 2;
            //2.窗体的大小及位置
            jf.setBounds(jframeX,jframeY,jfWidet,jfHeight);
            //3.默认关闭的方式
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //4.窗体可见
            jf.setVisible(true);
        }
    }
    
  • 第二种:

    import javax.swing.*;
    import java.awt.*;
    
    /**
     * 我的第二个窗体  面向对象的思想,在构造方法时对窗体进行初始化
     */
    public class MySecondJFrame extends  JFrame{
    
        //获取屏幕的宽
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        //获取屏幕的高
        int heigt = Toolkit.getDefaultToolkit().getScreenSize().height;
        //定义窗体的宽
        int jfWidet = 400;
        //定义窗体的高
        int jfHeight = 600;
        //计算水平居中x初始坐标
        int jframeX = width / 2 - jfWidet / 2;
        //计算垂直居中y初始坐标
        int jframeY = heigt / 2 - jfHeight / 2;
    
        public MySecondJFrame(){
            //1.窗体的标题
            this.setTitle("My first Jframe");
            //2.窗体的大小及位置
            this.setBounds(jframeX,jframeY,jfWidet,jfHeight);
            //3.默认关闭的方式
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //4.窗体可见
            this.setVisible(true);
        }
        public static void main(String[] args) {
            new MySecondJFrame();
        }
    }
    
  • 第三种:

    import javax.swing.*;
    
    /**
     * 我的第三个窗体 使用继承,属性工厂
     * 体现代码的复用性,及面向对象的编程思想
     */
    public class MyThirdJFrame extends  JFrame{
    
    
    
        public MyThirdJFrame(){
            //1.窗体的标题
            this.setTitle("My first Jframe");
            //2.窗体的大小及位置
            this.setBounds(Factory.jframeX,Factory.jframeY,Factory.jfWidet,Factory.jfHeight);
            //3.默认关闭的方式
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //4.窗体可见
            this.setVisible(true);
        }
        public static void main(String[] args) {
            new MyThirdJFrame();
        }
    }
    
    
    
    import java.awt.*;
    
    /**
     * 工厂数字类
     */
    public class Factory {
    
        //获取屏幕的宽
        public static int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        //获取屏幕的高
        public static int heigt = Toolkit.getDefaultToolkit().getScreenSize().height;
        //定义窗体的宽
        public static  int jfWidet = 400;
        //定义窗体的高
        public static  int jfHeight = 600;
        //计算水平居中x初始坐标
        public static  int jframeX = width / 2 - jfWidet / 2;
        //计算垂直居中y初始坐标
        public static int jframeY = heigt / 2 - jfHeight / 2;
    
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值