当前位置: 首页 > news >正文

类和对象(二)

一、包

(Package)是Java中⼀个组织类的⽅式,⽤于防⽌类名冲突和提⾼代码的可读性。包允许将类组织在⼀ 个层次结构中,类似于⽂件系统中的⽬录。

1.导入包中的类

使⽤import语句导⼊包

 import java.util.Date;public class Test {public static void main(String[] args) {Date date = new Date();// 得到⼀个毫秒级别的时间戳System.out.println(date.getTime());}}

(*就不说了,自己清楚就行,别用!!!)

2.包的访问权限

如果我们在定⼀个类的时候,如果没有指定成员变量/成员⽅法的访问权限,此时默认的访问权限就是 包访问权限。

二、封装

简单来说就是套壳屏蔽细节。

封装:将数据和操作数据的⽅法进⾏有机结合,隐藏对象的属性和实现细节,仅对外公开接⼝来和对 象进⾏交互

 class Student{private String name; //使⽤ private  修饰  private int age; //使⽤private  修饰public void eat() {System.out.println(this.name + " 正在吃饭!");}public void show() {System.out.println("name: "+name+" 年龄:"+age);}}public class Test {public static void main(String[] args) {Student stu= new Student();}}

上述代码使⽤private修饰之后,在Test类中⽆法通过person引⽤来进⾏访问数据,这⾥封装就起到 了作⽤!

如果要想访问,此时只能⼿动提供get和set⽅法作为公开的接⼝来进⾏访问!

 class Student{private String name; //使⽤ private  修饰private int age; //使⽤private  修饰public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void eat() {System.out.println(this.name + " 正在吃饭!");}public void show() {System.out.println("name: "+name+" 年龄:"+age);}}public class Test {public static void main(String[] args) {Student stu= new Student();stu.setAge(10);System.out.println(person.getAge());}}

好处:

1.封装可以降低对象和对象之间的耦合度,当对象内部发⽣变化时,只需要修改对象内部即可,不会影 响到外部程序,因为公开的接⼝是不会发⽣改变的

2.封装是隐藏了对象内部的实现细节,只提供了公开的接⼝给外部,使⽤起来更加简单

3.封装可以隐藏对象的具体实现细节,阻⽌外部程序直接访问对象的内部状态,从⽽保护数据不被意外 修改或破坏

访问限定符:

public修饰的成员变量,在所指定情况下均是可以正常访问的

private修饰的成员变量,只能在当前类中来使⽤

default表⽰什么修饰符都不加,此时只能在包当中才能被访问

protected可以在包中被访问,还可以在继承时在不同包的子类中被访问

三、static

我们以Student类为例,假设有3个学⽣,他们都是在同⼀个教室上课。

1.修饰成员变量

static-->修饰成员-->静态/类成员

(不属于某个具体的对象,是所 有对象所共享的。)

static-->修饰成员变量-->静态成员变量

 class Student{private String name; private int age; public String classRoom = "1-101";}public class Test {public static void main(String[] args) {Student stu1 = new Student();Student stu2 = new Student();Student stu3 = new Student();}}

静态成员变量特性:

(1)不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中

(2)既可以通过对象访问,也可以通过类名访问,但⼀般更推荐使⽤类名访问

(3)类变量存储在⽅法区当中

(4)⽣命周期伴随类的⼀⽣(即:随类的加载⽽创建,随类的卸载⽽销毁)

可以通过:类名.静态成员变量的⽅式进⾏访问

2.static修饰成员⽅法

static-->静态成员⽅法,是类的⽅法,不是某个对象所特有的。静态成员 ⼀般是通过静态⽅法来访问的。

 public class Student{private static String classRoom = "Bit306";public static String getClassRoom(){return classRoom;}}public class TestStudent {public static void main(String[] args) {System.out.println(Student.getClassRoom());}}

静态⽅法特性:

(1)不属于某个具体的对象,是类⽅法

(2)可以通过对象调⽤,也可以通过类名.静态⽅法名(...)⽅式调⽤,更推荐使⽤后者

(3)不能在静态⽅法中访问任何⾮静态成员变量

(4)静态⽅法中不能调⽤任何⾮静态⽅法,因为⾮静态⽅法有this参数,在静态⽅法中调⽤时候⽆法传 递this引⽤

3.成员变量初始化

(1)就地初始化:在定义时直接给出初始值

(2)静态代码块初始化

四、代码块

1.普通代码块:定义在⽅法中的代码块

 public class Main{public static void main(String[] args) {{ //直接使⽤{}定义,普通⽅法块int x = 10 ;System.out.println("x1 = " +x);}int x = 100 ;System.out.println("x2 = " +x);}

2.构造(实例)代码块:定义在类中的代码块(不加修饰符),⼀般⽤于初始化实例成员变量。

public class Student{//实例成员变量private String name;private String gender;private  int age;private double score;public Student() {System.out.println("I am Student init()!");}//实例代码块 {this.name = "bit";this.age = 12;this.sex = "man";System.out.println("I am instance init()!");}public void show(){System.out.println("name: "+name+" age: "+age+" sex: "+sex);}}public class Main {public static void main(String[] args) {Student stu = new Student();stu.show();}}

3.静态代码块;使⽤static定义的代码块称为静态代码块,⼀般⽤于初始化静态成员变量。

 static {classRoom = "bit306";System.out.println("I am static init()!");}

#注:

• 静态代码块不管⽣成多少个对象,其只会执⾏⼀次

• 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的

• 如果⼀个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执⾏(合并)

• 实例代码块只有在创建对象时才会执⾏

http://www.xdnf.cn/news/775045.html

相关文章:

  • 《Pytorch深度学习实践》ch3-反向传播
  • 使用ArcPy批量处理矢量数据
  • 力扣刷题Day 67:N 皇后(51)
  • 树莓派实验
  • 使用Bambi包进行贝叶斯混合效应模型分析
  • 强化学习-深度学习和强化学习领域
  • 通讯录Linux的实现
  • 如何选择合适的哈希算法以确保数据安全?
  • 列表推导式(Python)
  • 线程间和进程间是如何进行通信
  • PH热榜 | 2025-05-30
  • Linux中的mysql逻辑备份与恢复
  • 【AI+若依框架】基础应用篇
  • CUDA内存溢出问题解决方案
  • C++学习打卡1.01
  • SAP BC 修复MM60 报错的问题
  • MySQL 核心知识整理【一】
  • AI智能体|扣子(Coze)搭建【合同/文档审查】工作流
  • 应用程序错误 application error (0xc000007b) 处理方法
  • URL的结构与作用
  • ubuntu系统扩容
  • [SC]SystemC dont_initialize的应用场景详解(一)
  • 198. 打家劫舍
  • 如何用AI写作?
  • RFC 4862 IPv6 Stateless Address Autoconfiguration 翻译
  • [蓝桥杯]交换次数
  • 《汇编语言》第13章 int指令——实验13 编写、应用中断例程
  • Redis持久化机制详解:RDB与AOF的深度剖析
  • 麒麟信安安装谷歌浏览器
  • 计算机视觉---深度学习框架(Backbone、Neck、Head)