【前言】
在Java编程中,类和对象是面向对象编程的核心概念。而包(Package)、封装(Encapsulation)以及代码块(Code Block)作为重要的语言特性,在组织代码结构、保障数据安全和控制代码执行流程等方面发挥着关键作用。本文将通过详细的代码示例和图解,带大家深入理解这些特性。
包
(Package)是Java中⼀个组织类的⽅式,⽤于防⽌类名冲突和提⾼代码的可读性。包允许将类组织在⼀个层次结构中,类似于⽂件系统中的⽬录。文件夹
。Java 中已经提供了很多现成的类供我们使⽤,例如Date
类:可以使⽤java.util.Date
导⼊java.util
这个包中的 Date 类.
方法一:写全路径导入
public class Test {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
System.out.println(date.getTime());
}
}
方法二:使用import导入
java.util.Date date = new java.util.Date();
上面的写法就比较麻烦了,我们可以直接使用
import
导入包
import java.util.Date;
public class Test {
public static void main(String[] args) {
// java.util.Date date = new java.util.Date();
Date date = new Date();
System.out.println(date.getTime());
}
}
快捷方式:输入Date,回车即可
方法三:使用 import java.util.*
导入,就可以使用java.util
中的其他类
import java.util.*;
public class Test {
public static void main(String[] args) {
// java.util.Date date = new java.util.Date();
Date date = new Date();
System.out.println(date.getTime());
}
}
建议显示的指定要导入的类名,否则容易出现冲突,如下图:当有两个包都有Date类时,编译器就不知道该引入哪个包中的类了
package
语句指定该代码在哪个包中.com.bit.demo1
).package com.bit.demo1;
public class TestDame {
}
java.lang
:系统常⽤基础类(String、Object),此包从JDK1.1后⾃动导⼊。java.lang.reflect
:java 反射编程包;java.net
:进⾏⽹络编程开发包。java.sql
:进⾏数据库开发的⽀持包。java.util
:是java提供的⼯具程序包。(集合类等) ⾮常重要java.io
:I/O编程开发包。如果我们在定⼀个类的时候,如果没有指定成员变量/成员⽅法的访问权限,此时默认的访问权限就是包访问权限
。
package com.bit.demo1;
public class Computer {
private String cpu; //cpu
private String memory;//内存
public String screen; //屏幕
String brand; //品牌 包访问权限
public Computer(String brand,String cpu,String memory,String screen){
this.brand = brand;
this.cpu = cpu;
this.memory = memory;
this.screen = screen;
}
public void Boot(){
System.out.println("开机~~~");
}
public void PowerOff(){
System.out.println("关机~~~");
}
public void SurfInternet(){
System.out.println("上网~~~");
}
}
package com.bit.dame2;
import com.bit.demo1.Computer;
import javax.swing.*;
public class Tes {
public static void main(String[] args) {
Computer computer = new Computer("华为","英特尔","8G","三星");
System.out.println(computer.brand);
System.out.println(computer.screen);
System.out.println(computer.cpu);
System.out.println(computer.memory);
}
}
public修饰的成员在哪里都能访问,它的权限是最大的
public String screen; //屏幕
System.out.println(computer.screen);
只能在当前类中使用
只能在dema1包中使用
封装、继承、多态
。⽽类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节。封装
:将数据和操作数据的⽅法进⾏有机结合,隐藏对象的属性和实现细节,仅对外公开接⼝来和对象进⾏交互package com.bit.demo1;
public class Computer {
private String cpu; //cpu
private String memory;//内存
public String screen; //屏幕
String brand; //品牌 包访问权限
public Computer(String brand,String cpu,String memory,String screen){
this.brand = brand;
this.cpu = cpu;
this.memory = memory;
this.screen = screen;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getMemory() {
return memory;
}
public void setMemory(String memory) {
this.memory = memory;
}
public void Boot(){
System.out.println("开机~~~");
}
public void PowerOff(){
System.out.println("关机~~~");
}
public void SurfInternet(){
System.out.println("上网~~~");
}
}
package com.bit.dame2;
import com.bit.demo1.Computer;
import javax.swing.*;
public class Tes {
public static void main(String[] args) {
Computer computer = new Computer("华为","英特尔","8G","三星");
System.out.println(computer.getCpu());
System.out.println(computer.screen);
System.out.println(computer.getMemory());
}
}
通过
private
对Computer中的成员变量进行隐藏,但是可以提供get或者set方法,让内外进行交互(这里编译器也可以自动生成),方法如下:
降低代码的耦合性
封装可以降低对象和对象之间的耦合度,当对象内部发⽣变化时,只需要修改对象内部即可,不会影 响到外部程序,因为公开的接⼝是不会发⽣改变的降低代码的复杂性
封装是隐藏了对象内部的实现细节,只提供了公开的接⼝给外部,使⽤起来更加简单提⾼安全性
封装可以隐藏对象的具体实现细节,阻⽌外部程序直接访问对象的内部状态,从⽽保护数据不被意外 修改或破坏Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的⽅法结合在⼀起,更符合⼈类对事物的认知,⽽访问权限⽤来控制⽅法或者字段能否直接在类外使⽤。Java中提供了四种访问限定符:
• public修饰的成员变量,在所指定情况下均是可以正常访问的 • private修饰的成员变量,只能在当前类中来使⽤ • default表⽰什么修饰符都不加,此时只能在包当中才能被访问
在Java中,被static
修饰的成员,称之为静态成员
,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的
创建一个Student 类,其中包含两名学生的姓名,年龄和班级(一样),这时就可以用
static
修饰班级,如下代码:
package demo;
public class Student {
public String name;
public int age;
public static String classRoom;//静态
}
package demo;
public class Test {
public static void main(String[] args) {
Student.classRoom = "1";
Student student1 = new Student();
student1.name = "lisa";
student1.age = 18;
Student student2 = new Student();
student2.name = "baby";
student2.age = 20;
System.out.println(Student.classRoom);
}
}
执行结果:
【静态成员变量特性】
类名.静态成员变量的⽅式进⾏访问
System.out.println(Student.classRoom);
Java中,被static修饰的成员⽅法称为静态成员⽅法,是类的⽅法,不是某个对象所特有的。静态成员⼀般是通过静态⽅法来访问的。
public static String getClassRoom(){
return classRoom;
}
System.out.println(Student.getClassRoom());
【静态⽅法特性】
public void doClass(){
System.out.println("学习");
}
public static String getClassRoom(){
doClass();
}
就地初始化 在定义时直接给出初始值
pubilc class Student{
private String name;
private static String classRoom = "1"
使⽤ {} 定义的⼀段代码称为代码块
• 普通代码块 • 构造块(实例代码块) • 静态块 • 同步代码块(
普通代码块就是定义在方法中的代码块
public static void main(String[] args) {
int a = 0;
System.out.println(a);
}
定义在类中的代码块,也叫实例代码块,一般用于初始化实例成员变量
public class Student {
//实例代码块
{
this.name = "lisi";
this.age = 18;
System.out.println("实例代码块执行");
}
public class Test {
public static void main(String[] args) {
Student student1 = new Student();
System.out.println(student1.name);
System.out.println(student1.age);
}
执行结果
【执行顺序】
使⽤static
定义的代码块称为静态代码块。⼀般⽤于初始化静态成员变量。
public class Student {
//实例代码块
{
this.name = "lisi";
this.age = 18;
System.out.println("实例代码块执行");
}
//静态代码块
static {
System.out.println("静态代码块被执行");
}
public class Test {
public static void main(String[] args) {
Student student1 = new Student();
System.out.println(student1.name);
System.out.println(student1.age);
}
执行结果
注意事项 • 静态代码块不管⽣成多少个对象,其只会执⾏⼀次 • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的 • 如果⼀个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执⾏(合并) • 实例代码块只有在创建对象时才会执⾏
【总结】
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有