JavaSE学习之--类和对象(二)

简介: JavaSE学习之--类和对象(二)

JavaSE学习之--类和对象(一)+https://developer.aliyun.com/article/1413482

3.默认初始化:

 上文已经提到过,成员变量不初始化也可以以通过编译,并有默认值,主要是因为编译器提供了一个默认的构造方法,在对象创建时就会被调用。实际上,通过new关键字来实例化对象要做的工作很多!

4.就地初始化(在创建成员变量时就直接赋值)

// 就地初始化(写死了)
    public String name = "绿子";
    public String sex = "girl";
    public int age = 18;

封装:

1.引入:

       我们见到的电脑主机往往都被一层黑壳包住,我们只需要通过主机上的接口来实现和计算机之间的交互。但实际上,主机内部有着复杂的电子元件,来实现特定的功能!但我们并不关心他内部的属性,以及如何运转的,我们只需要通过接口来实现交互,这种将属性和内部方法(实现细节)隐藏的做法就是封装!

2.访问修饰限定符:

在计算机中,通过类来存储属性和方法!那如何实现封装呢?通过访问修饰限定符来实现!

public:公开,可跨包,跨类

protected: 不能跨包

default:默认权限,不可跨包

private:只能在同一包同一类使用

public class Stu2 {
    // 访问修饰限定符
    private int age;
    String sex;
    public String name;
    public Stu2(int age,String sex,String name) {
        this.age = age;
        this.name = name;
        this.sex = sex;
    }
    public void stuRun() {
        System.out.println(this.name+"i am running!");
    }
    public void stuSleep() {
        System.out.println(this.name + "i am sleeping!");
    }
    public static void main2(String[] args) {
        Stu2 stu = new Stu2(14,"男","边度");
        System.out.println(stu.age);// private  只能在Stu2类中访问
        System.out.println(stu.sex);// default  默认权限,可以在当前包中任意类访问
        System.out.println(stu.name);// public  公开权限,可跨包访问
        stu.stuRun();
        stu.stuSleep();
    }
}

private:无法跨类访问

一般情况下,成员变量设置为private,方法设置为public

       那如果我想在类外使用private属性的成员变量该怎么办呢?答案是:使用set和get方法(方法被设置为公开的,无法访问成员变量,但可以访问方法,通过方法来访问成员变量)

3.set和get方法的创建

快速创建set和get方法的步骤:

包:

引入:

       上文提到default无法跨包访问,那什么是包呢?包就是类的集合,是用来管理类的!可以把包理解为一个大的文件夹,里面存放的是各种类,通过包可以很好的组织,管理类!比如当你不想当前包的类被其他包访问,就可以修饰为default;包还有一个重要的作用,在同一个工程内,可以出现两个相同名字的类,只要处于不同的包中。(在两个文件夹内都有“周杰伦歌曲”这个类,电脑也不会报错)

1.导入包中的类

其实Java中提供了很多的现成的类供我们使用,比如常见的util类,Arrays类等等;在使用这些类时,要进行相应的导入,导入是通过import

如果需要使用 java.util 中的其他类, 可以使用 import java.util.*

import java.util.*;
import java.sql.*;
Date date = new Date();// err
// 如果存在访问冲突,要写具体,是哪个包中的类
java.util.Date date = new java.util.Date();

2.使用static导入静态包

import static java.lang.Math.*;
   public static void main(String[] args) {
        double x= 2.0;
        double y = 3.0;
        System.out.println((Math.pow(x, 2) + Math.pow(y, 2)));// 13.0
        // 添加static关键字,可以直接使用方法名,不需要再添加Math了,这样写更方便,但不建议用
        System.out.println(pow(x, 2) + pow(y, 2));
    }

注意:

import和C语言中的include不一样,include是导入文件,import是导入相应的类,使用相应的方法!!!同时,include包括所有函数的具体实现方法,Import只是导入接口的声明,并不包括具体的实现细节;include加头文件是在预处理阶段就进行的,而import是在编译阶段进行

3.创建自定义包:

4.通过自定义包再次深入理解访问修饰限定符的权限:

常见的包:

1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。

2. java.lang.reflect:java 反射编程包;

3. java.net:进行网络编程开发包。

4. java.sql:进行数据库开发的支持包。

5. java.util:是java提供的工具程序包。(集合类等) 非常重要

6. java.io:I/O编程开发包。

在编译器中快速查看常见包:双击shift

静态成员(类成员)

1.定义:

       所有对象共享的成员变量就叫做静态成员变量!通过static关键字修饰。静态成员变量不属于对象,而是属于类!推荐通过类来访问静态成员变量!

class Stu{
    // 实例成员变量-->每个对象都包含一份
    int age;
    String name;
    String sex;
    // 假如三位学生都是一个班的,现在要创建一个classroom的成员变量
    // 由于他们都是一个班的,可以说他们共享一个“classroom”
    // 共享的成员变量就是静态成员变量
    public static String classroom = "110";
    public Stu(int age, String name, String sex) {
        this.age = age;
        this.name = name;
        this.sex = sex;
    }
}
public class Test {
    public static void main(String[] args) {
        Stu stu1 = new Stu(15,"biandu","boy");
        Stu stu2 = new Stu(18,"绿子","girl");
        Stu stu3 = new Stu(19,"栀子","boy");
        // 直接通过类名访问(推荐)
        System.out.println(Stu.classroom);
        // 通过对象访问(不推荐)
        System.out.println(stu1.classroom);
        System.out.println(stu2.classroom);
        System.out.println(stu3.classroom);
    }

2.类变量不属于对象,继而他并不存在于堆区,而是存在于方法区!

JavaSE学习之--类和对象(三)+https://developer.aliyun.com/article/1413486

目录
相关文章
|
机器学习/深度学习 人工智能 算法
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
BALROG 是一款用于评估大型语言模型(LLMs)和视觉语言模型(VLMs)在复杂动态环境中推理能力的基准测试工具。它通过一系列挑战性的游戏环境,如 NetHack,测试模型的规划、空间推理和探索能力。BALROG 提供了一个开放且细粒度的评估框架,推动了自主代理研究的进展。
603 3
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
|
编解码 定位技术
GIS空间分析 数字地形分析2 基本地形因子的提取
在本文中,你将学习到如何利用DEM数据在ArcGIS中提取出坡度、坡向等地形因子。
1100 0
|
SQL 关系型数据库 Shell
SQL整库导出语录及其实用技巧与方法
在数据库管理和备份恢复过程中,整库导出是一项至关重要的任务
|
安全 网络安全 网络虚拟化
路由器与交换机:Access/Trunk,Wan/Lan
路由器与交换机:Access/Trunk,Wan/Lan
2135 0
|
存储 Ubuntu Linux
linux中的find 命令详细用法
本文介绍了如何将 `find` 命令与 `exec` 结合使用,通过具体示例展示了多种应用场景,如显示文件属性、重命名文件、收集文件大小、删除特定文件、执行工具、更改文件所有权和权限、收集 MD5 值等。文章还探讨了 `{} \;` 和 `{} +` 的区别,并演示了如何结合 `grep` 命令进行内容搜索。最后,介绍了如何在一个 `find` 命令中使用多个 `exec` 命令。这为 Linux 用户提供了强大的文件管理和自动化工具。
|
Kubernetes 安全 Cloud Native
解锁安全新纪元:利用服务网格Istio,打造全链路mTLS加密隧道,从入口网关到出口网关,守护数据安全的每一步
【8月更文挑战第2天】随着云原生技术的发展,服务网格(Service Mesh)如Istio已成为微服务架构的核心,通过双向TLS(mTLS)确保通信安全。首先,在Kubernetes部署Istio以管理服务通信。接着,配置入口网关实现所有入向流量的加密处理,防止数据泄露。最后,通过配置Sidecar代理如Envoy,确保服务网格安全访问外部mTLS服务,从而构建起全链路的数据安全防护。
732 11
|
弹性计算 运维 自然语言处理
阿里云OS Copilot测评:重塑Linux运维与开发体验的智能革命
阿里云OS Copilot巧妙地将大语言模型的自然语言处理能力与操作系统团队的深厚经验相结合,支持自然语言问答、辅助命令执行等功能,为Linux用户带来了前所未有的智能运维与开发体验。
|
机器学习/深度学习 算法 API
【机器学习】正则化,欠拟合与过拟合(详细代码与图片演示!助你迅速拿下!!!)
【机器学习】正则化,欠拟合与过拟合(详细代码与图片演示!助你迅速拿下!!!)
|
网络协议 安全 网络安全
深入解析TURN协议的作用与重要性
【8月更文挑战第24天】
783 0