JAVA语法&包和访问控制 & Static 关键字的作用

本文涉及的产品
访问控制,不限时长
简介: 在编写 Java 程序时,随着程序架构越来越大,类的个数也越来越多,这时就会发现管理程序中维护类名称也是一件很麻烦的事,尤其是一些同名问题的发生。开发人员还可能需要将处理同一方面的问题的类放在同一个目录下,以便于管理。 计算机中存放了若干类型的文档,为了管理方便,操作系统采用了树形结构的文件夹形式存放这些文档,并对文档进行管理。为了更好地组织类,Java 提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的类都属于一个默认的无名包。Java 中将实现相关功能的类组织到一个包中。例如,Jav

目录

前言

一、Java包概述

1.包的简介

2.包的语法

3.包的命名规则

4.JDK类库里的包

5.怎么导包

二、访问控制

1.访问权限修饰符

2.Static关键字作用


前言

在编写 Java 程序时,随着程序架构越来越大,类的个数也越来越多,这时就会发现管理程序中维护类名称也是一件很麻烦的事,尤其是一些同名问题的发生。开发人员还可能需要将处理同一方面的问题的类放在同一个目录下,以便于管理。


一、Java包概述

1.包的简介

计算机中存放了若干类型的文档,为了管理方便,操作系统采用了树形结构的文件夹形式存放这些文档,并对文档进行管理。为了更好地组织类,Java 提供了包机制。

包是类的容器,用于分隔类名空间。如果没有指定包名,所有的类都属于一个默认的无名包。Java 中将实现相关功能的类组织到一个包中。例如,Java 中通用的工具类,一般都放在 java.util 包中

总的来说,包有以下三个方面的作用:

    1. 提供了类似于操作系统树形文件夹的组织形式,能分门别类地存储、管理类,易于查找并使用类。
    2. 解决了同名类的命名冲突问题。
    3. 包允许在更广的范围内保护类、属性和方法。

    2.包的语法

    程序员可以使用 package 关键字指明源文件中的类属于哪个具体的包,包的语法形式如下。

    package pkg1[.pkg2[.pkg3…]];

    image.gif

    程序中如果有 package 语句,该语句一定是源文件中的第一条可执行语句,它的前面只能有注释或空行。

    一个文件中最多只能有一条 package 语句,即只能把一个类放在一个包中。

    包的名字应该有层次关系,各层之间以.分隔。

    3.包的命名规则

    通常包名全部用小写字母,这与类名以大写字母开头且各单词的首字母亦大写的命名约定有所不同。关于包的命名,现在使用最多的规则是使用翻转的 internet 域名(不含 www、ftp 等访问协议)。

    例如 abc 公司的域名为 abc.com,该公司开发部门正开发一个名为 fly 的项目,在这个项目中有一个工具类的包,则这个工具包的包名可以为:com.abc.fly.tools。

    4.JDK类库里的包

    image.gif

    java.lang:lang 是 language 的简写,这个包提供 Java 语言的基础类,例如 String、Math、Integer、System 和 Thread 等。

    java.util:util 是 utility 的简写,组织了 Java 的工具类,包含集合、事件模型、日期和时间设置、国际化和各种实用工具类

    java.io:io 是 input 和 output 的合并简写,指输入和输出,组织了数据流、序列化和文件系统相关的类

    java.net:net即网络,这个包组织了为实现网络应用程序而提供的类

    java.awt:抽象窗口工具集(Abstract Window Toolkit),包含用于创建用户界面和绘制图形图像的类

    5.怎么导包

    image.gif

    import java.util.ArrayList;                              //导入java.util包中的ArrayList类

    import java.util.Random;                      //导入java.util包中的Random类

    java 还提供了一种批量导入的方式:如果要导入的多个类存在于同一个包中,那么可以使用通配符 * 代表包中的所有类。例如可以使用 import java.util.* 代表导入了 java.util 包中的所有类,如下图所示。

    image.gif

    二、访问控制

    1.访问权限修饰符

    Java 语言中的访问权限修饰符有 4 种,但却只有 3 个关键字。因为不写访问权限修饰符时,在 Java 中被称为默认权限(包权限),这里以 default 代替。其他 3 个访问权限修饰符分别为 private、protected 和 public。

    私有权限 private

    private 可以修饰属性、构造方法、普通方法。被 private 修饰的类成员只能在定义它们的类中使用,在其他类中都不能访问。

    默认权限 default

    不写任何权限关键字就代表使用默认权限,属性、构造方法、普通方法都能使用默认权限。默认权限也称为同包权限。同包权限的元素只能在定义它们的类中以及同包的类中被调用。

    受保护权限 protected

    protected 可修饰属性、构造方法、普通方法,能在定义它们的类中以及同包的类中调用被 protected 修饰的成员。如果有不同包中的类想调用它们,那么这个类必须是这些成员所属类的子类。关于子类及相关概念,将会在后续讲解继承的时候详细介绍。

    公共权限 public

    public 可以修饰属性、构造方法和普通方法。被 public 修饰的成员,可以在任何一个类中被调用,是权限最大的访问权限修饰符。

    image.gif

    2.Static关键字作用

    静态方法只能访问静态成员,不可以直接访问实例成员。

    image.gif不可直接访问并不等于说不能访问,那么我们应该怎么访问呢,可以创建对象去调用它

    public class Test {
        //实例成员
        private String name;
        private static int age;
        //实例方法
        public void eat(){
            System.out.println(name + "要吃东西");
        }
        //静态方法
        public static void drink(){
            System.out.println("喝东西");
        }
        //静态方法
        public static void test(){
            Test test = new Test();
            System.out.println(test.name);  //创建对象访问实例成员
            System.out.println(age);        //可以直接访问静态成员
            test.eat();                    //创建对象访问实例方法
            drink();                       //可以直接访问静态方法
        }

    image.gif

    实例方法可以访问静态的成员,也可以访问实例成员。

    //实例成员
        private String name;
        private static int age;
        //实例方法
        public void eat(){
            System.out.println(name + "要吃东西");
        }
        //静态方法
        public static void drink(){
            System.out.println("喝东西");
        }
        //实列方法
        public void go(){
            System.out.println(name); //可以访问实例成员
            System.out.println(age);  //可以访问静态成员
            eat();                    //可以访问实例方法
            drink();                  //可以访问静态方法
        }
    }

    image.gif

    (简单来说实例方法就是西厂雨化田,静态能访的我要访,静态不能访的我更要访)

    静态方法不可以出现this关键字

    image.gif

    (This只能代表当前对象! 静态方法可以不用对象调用)

    public class Test {
        static{
            System.out.println("test static 1");
        }
        static{
            System.out.println("test static 2");
        }
        public static void main(String[] args) {
        }
    }

    image.gif

    image.gif


    总结

    最后再重点强调

    静态只能访问静态。

    非静态既可以访问非静态的,也可以访问静态的

    相关实践学习
    消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
    基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
    云安全基础课 - 访问控制概述
    课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
    目录
    相关文章
    |
    29天前
    |
    存储 安全 Java
    探索 Java 静态变量(static)的奥秘
    本文深入探讨了Java中的静态变量(`static`),从初印象、使用场景、访问方式、初始化、线程安全、优缺点到最佳实践,全面解析其特性和应用场景。静态变量属于类而非实例,适用于共享数据、定义全局常量和工具类中的变量。它在类加载时初始化,生命周期贯穿整个程序运行。然而,多线程环境下需注意线程安全问题,可通过`synchronized`或原子类解决。优点包括共享数据方便和提高性能,但也存在线程安全和代码耦合度增高的缺点。最佳实践建议谨慎使用、保证线程安全、遵循命名规范并封装访问。掌握静态变量的正确用法,能让你的代码更加高效简洁。
    52 11
    |
    29天前
    |
    Java 编译器 开发者
    Java中的this关键字详解:深入理解与应用
    本文深入解析了Java中`this`关键字的多种用法
    120 9
    |
    2月前
    |
    存储 缓存 Java
    Java 并发编程——volatile 关键字解析
    本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
    Java 并发编程——volatile 关键字解析
    |
    1月前
    |
    JSON Java 数据挖掘
    利用 Java 代码获取淘宝关键字 API 接口
    在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
    |
    2月前
    |
    缓存 安全 Java
    Java volatile关键字:你真的懂了吗?
    `volatile` 是 Java 中的轻量级同步机制,主要用于保证多线程环境下共享变量的可见性和防止指令重排。它确保一个线程对 `volatile` 变量的修改能立即被其他线程看到,但不能保证原子性。典型应用场景包括状态标记、双重检查锁定和安全发布对象等。`volatile` 适用于布尔型、字节型等简单类型及引用类型,不适用于 `long` 和 `double` 类型。与 `synchronized` 不同,`volatile` 不提供互斥性,因此在需要互斥的场景下不能替代 `synchronized`。
    2277 3
    |
    3月前
    |
    JavaScript 前端开发 Java
    java中的this关键字
    欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
    71 9
    |
    3月前
    |
    设计模式 JavaScript 前端开发
    java中的static关键字
    欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
    68 8
    |
    8月前
    |
    缓存 安全 Java
    《volatile使用与学习总结:》多层面分析学习java关键字--volatile
    《volatile使用与学习总结:》多层面分析学习java关键字--volatile
    48 0
    |
    9月前
    |
    安全 Java 编译器
    Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字(一)
    线程安全问题是多线程编程中最典型的一类问题之一。如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的。 通俗来说,线程不安全指的就是某一代码在多线程环境下执行会出现bug,而在单线程环境下执行就不会。线程安全问题本质上是由于线程之间的调度顺序的不确定性,正是这样的不确定性,给我们的代码带来了很多“变数”。 本文将对Java多线程编程中,线程安全问题展开详细的讲解。
    129 0
    |
    9月前
    |
    存储 安全 Java
    【亮剑】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制
    【4月更文挑战第30天】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制。`ThreadLocal`为每个线程提供独立变量副本;`Volatile`确保变量可见性,但不保证原子性;`Synchronized`实现同步锁,保证单线程执行;`Atomic`类利用CAS实现无锁并发控制。理解其原理有助于编写高效线程安全代码。根据业务场景选择合适机制至关重要。
    57 0

    热门文章

    最新文章