易联网站制作微信开发人是谁
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:00
当前位置: 首页 > news >正文
易联网站制作,微信开发人是谁,wordpress写文章出现排版乱,向祖国建设者致敬网站六、 封装
6.1 封装的概念
面向对象程序三大特性#xff1a;封装、继承、多态。而类和对象阶段#xff0c;主要研究的就是封装特性。
封装#xff1a;将数据和操作数据的方法进行有机结合#xff0c;隐藏对象的属性和实现细节#xff0c;仅对外公开接口来和对象进行交互…六、 封装
6.1 封装的概念
面向对象程序三大特性封装、继承、多态。而类和对象阶段主要研究的就是封装特性。
封装将数据和操作数据的方法进行有机结合隐藏对象的属性和实现细节仅对外公开接口来和对象进行交互 简单来说套壳屏蔽细节为了安全考虑
class Student {private String name;private int age;public Student(String name, int age) {this.name name;this.age age;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public void setName(String name) {this.name name;}public String getName() {return this.name;}public void eat() {System.out.println(this.name 正在吃饭);}}
public class Test {public static void main(String[] args) {Student student new Student(张三, 10);//student.name dafa; 实现封装后就无法直接拿到这个name字段了student.setName(李四);System.out.println(student.getName());student.eat();}
}上面代码中的成员变量被private修饰就是进行了封装那么在Student这个类外就不能直接用student.name而需要写setName方法来初始化name在此介绍一种快速get和set成员变量的方式 在Idea中右键鼠标-Generate-getter/setter/getter and setter根据自己需要选择即可 成员方法也可以被private修饰eg上面构造方法被封装了那么我们就可以在eat方法中调用Student student new Student(张三, 10)这样进行初始化 6.2 访问限定符
Java中主要通过类和访问权限来实现封装类可以将数据以及封装数据的方法结合在一起更符合人类对事物的认知而访问权限用来控制方法或者字段能否直接在类外使用。
Java中提供了四种访问限定符
NO范围privatedefaultprotectedpublic1同一个包中的同一类√√√√2同一个包中的不同类√√√3不同包中的子类√√4不同包中的非子类√ public通用的公开的哪里都可以用 default: 同一个包中才能使用即包访问权限可以是同类也可以是不同类 private只能在当前类使用 default同一个包不同类验证 package com.bit.demo1; //当前类所在的包public class TestDemo {int count 99;
}
package com.bit.demo1;public class TestDemo2 {public static void main(String[] args) {TestDemo testDemo new TestDemo();System.out.println(testDemo.count); # 结果99}
}
【说明】
1protected主要是用在继承中继承部分详细介绍
2default权限指什么都不写情况下的默认权限
3访问权限除了可以限定类中成员的可见性也可以控制类的可见性
public class Computer {private String cpu;private String memory;public String screen;String brand; //default属性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(上网~~);}
}public static void main(String[] args) {Computer p new Computer(VSUS,i7,16G,13*14);System.out.println(p.brand);//default属性只能在本包中类访问System.out.println(p.screen);//public属性可以任何其他类访问//System.out.println(p.cpu);//private属性只能在Computer类中访问不能被其他类访问//System.out.println(p.memory);//private属性
}
注意一般情况下成员变量设置为private成员方法设置为public 6.3 封装扩展之包
6.3.1 包的概念
为了更好的管理类把多个类收集在一起成为一组称为软件包。有点类似于目录。比如为了更好的管理电脑中的歌曲一种好的方式就是将相同属性的歌曲放在相同文件下也可以对某个文件夹下的音乐进行更详细的分类 在Java中也引入了包包是对类、接口等的封装机制的体现是一种对类或者接口等的很好的组织方式比如一个包中的类不想被其他包中的类使用。包还有一个重要的作用在同一个工程中允许存在相同名称的类只要处在不同的包中即可 6.3.2 导入包中的类
Java 中已经提供了很多现成的类供我们使用. 例如Date类可以使用 java.util.Date 导入 java.util 这个包中的 Date类
public static void main(String[] args) {java.util.Date date new java.util.Date();//得到一个毫秒级别的时间戳System.out.println(date.getTime());
}
还有一种更简便的方法使用 import语句导入包选中Date-旁边会有提示Alt回车快速导包
import java.util.Date;public class code {public static void main(String[] args) {Date date new Date();//得到一个毫秒级别的时间戳System.out.println(date.getTime());}
}
如果需要使用 java.util 中的其他类, 可以使用 import java.util. (不推荐这种方式容易出现冲突的情况util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错这时候就使用Date就需要写完整的类名如java.util.Date而不能写Date
import java.util.;public class code {public static void main(String[] args) {Date date new Date();//得到一个毫秒级别的时间戳System.out.println(date.getTime());}
} 可以使用import static导入包中静态的方法和字段很少用虽然简洁但是用起来很变扭
import static java.lang.Math.;
import static java.lang.System.;public class Test {public static void main(String[] args) {double x 30;double y 40;// 静态导入的方式写起来更方便一些//Math.pow(d2, d1);pow(d2,d1);//System.out.println();out.println();}
} 注意事项: import 和 C 的 #include 差别很大.
C 必须 #include 来引入其他文件内容, 但是 Java 不需要.
import 只是为了写代码的时候更方便. import 更类似于 C 的 namespace 和 using 6.3.3 自定义包
基本规则
1在文件的最上方加上一个 package 语句指定该代码在哪个包中. 2包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 )
3包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码
4如果直接在src下创建的一个类没有 package 语句, 则该类被放到一个默认包中 6.3.4 包的访问权限控制举例
Computer类位于com.bit.demo1包中TestComputer位置com.bit.demo2包中
package com.bit.demo1;public class Computer {private String cpu; // cpuprivate 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.bite.demo2;
import com.bite.demo1.Computer;public class TestComputer {public static void main(String[] args) {Computer p new Computer(HW, i7, 8G, 13*14);System.out.println(p.screen);// System.out.println(p.cpu); // 报错cup是私有的不允许被其他类访问// System.out.println(p.brand); // 报错brand是default不允许被其他包中的类访问}
} // 注意如果去掉Computer类之前的public修饰符代码也会编译失败 6.3.5 常见的包
1java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入
2 java.lang.reflect:java 反射编程包
3java.net:进行网络编程开发包
4java.sql:进行数据库开发的支持包
5 java.util:是java提供的工具程序包。(集合类等) 非常重要
6java.io:I/O编程开发包 七、static成员
7.1 再谈学生类
使用前文中介绍的学生类实例化三个对象s1、s2、s3每个对象都有自己特有的名字、性别年龄学分绩点等成员信息这些信息就是对不同学生来进行描述的如下所示
public class Student{// …public static void main(String[] args) {Student s1 new Student(Li leilei, 男, 18, 3.8);Student s2 new Student(Han MeiMei, 女, 19, 4.0);Student s3 new Student(Jim, 男, 18, 2.6);}
} 假设三个同学是同一个班的那么他们上课肯定是在同一个教室那既然在同一个教室那能否给类中再加一个成员变量来保存同学上课时的教室呢答案是不行的。
之前在Student类中定义的成员变量每个对象中都会包含一份(称之为实例变量)因为需要使用这些信息来描述具体的学生。而现在要表示学生上课的教室这个教室的属性并不需要每个学生对象中都存储一份而是需要让所有的学生来共享。在Java中被static修饰的成员称之为静态成员也可以称为类成员其不属于某个具体的对象是所有对象所共享的 7.2 static修饰成员变量
static修饰的成员变量只能是成员变量或者成员方法不能是局部变量称为静态成员变量静态成员变量最大的特性不属于某个具体的对象是所有对象所共享的。
【静态成员变量特性】
1不属于某个具体的对象属于类的所有对象共享的不存储在某个对象的空间中
2 既可以通过对象访问也可以通过类名访问但一般更推荐使用类名访问
3 类变量存储在方法区当中
4生命周期伴随类的一生(即随类的加载而创建随类的卸载而销毁)
5访问static修饰的变量可以不用实例化变量 因为它属于类和对象没关系
public class Student{public String name;public String gender;public int age;public double score;public static String classRoom Bit306;// …public static void main(String[] args) {// 静态成员变量直接通过类名访问合理的方式Student.classroom 3-601;Student s1 new Student(Li leilei, 男, 18, 3.8);Student s2 new Student(Han MeiMei, 女, 19, 4.0);Student s3 new Student(Jim, 男, 18, 2.6);// 不属于对象就不能通过对象的引用来访问但是不是报错是警告不合理//student1.classroom 3-601;}
}
同学以调试方式运行上述代码然后在监视窗口中可以看到静态成员变量并没有存储到某个具体的对象中
总结 类的成员变量有两种 1静态成员变量 1属于类的不属于对象的只有1份 2类名点号来访问静态成员变量 2非静态成员变量/普通成员变量 1属于对象的每实例化一个对象都会有一个对应的非静态成员变量 2对应的引用 点号来访问 注意讲到这里肯定有友友会说这不就是全局变量吗
但是实际上Java中没有全局变量一说 全局的定义在哪个范围也不清楚所以不存在全局 7.3 static修饰成员方法
一般类中的数据成员都设置为private而成员方法设置为public那设置之后Student类中classRoom属性如何在类外访问呢
public class Student{private String name;private String gender;private int age;private double score;private static String classRoom Bit306;// …
}public class TestStudent {public static void main(String[] args) {System.out.println(Student.classRoom);}
} 编译失败
Error:(10, 35) java: classRoom 在 extend01.Student 中是 private 访问控制 那static属性应该如何访问呢
Java中被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());}
}输出Bit306 【静态方法特性】
- 不属于某个具体的对象是类方法
- 可以通过对象调用也可以通过类名.静态方法名(…)方式调用更推荐使用后者
- 不能在静态方法中访问任何非静态成员变量 public static String getClassRoom(){System.out.println(this);return classRoom; }// 编译失败Error:(35, 28) java: 无法从静态上下文中引用非静态 变量 thispublic static String getClassRoom(){age 1;return classRoom; } // 编译失败Error:(35, 9) java: 无法从静态上下文中引用非静态 变量 age 4. 静态方法中不能调用任何非静态方法因为非静态方法有this参数在静态方法中调用时候无法传递this引用 public static String getClassRoom(){doClass();return classRoom; } // 编译报错Error:(35, 9) java: 无法从静态上下文中引用非静态 方法 doClass() 5. 静态方法无法重写不能用来实现多态(此处大家暂时不用管后序多态位置详细讲解) 7.4 static成员变量初始化 注意静态成员变量一般不会放在构造方法中来初始化构造方法中初始化的是与对象相关的实例属性 静态成员变量的初始化分为两种就地初始化 和 静态代码块初始化。
- 就地初始化 就地初始化指的是在定义时直接给出初始值 public class Student{private String name;private String gender;private int age;private double score;private static String classRoom Bit306;// … } 2. 静态代码块初始化 那什么是代码块呢继续往后看 :) ~~~ 八、 代码块 8.1 代码块概念以及分类 使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字又可分为以下四种 (1普通代码块 (2) 构造块 (3) 静态块 (4) 同步代码块后续讲解多线程部分再谈 8.2 普通代码块 普通代码块定义在方法中的代码块较少见 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);} } // 执行结果 x1 10 x2 100 8.3 构造代码块 构造块定义在类中的代码块(不加修饰符)。也叫实例代码块。构造代码块一般用于初始化实例成员变量 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);} } 8.4 静态代码块 使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量 public class Student{private String name;private String gender;private int age;private double score;private static String classRoom;// 静态代码块static {classRoom bit306;System.out.println(I am static init()!);}public Student(){System.out.println(I am Student init()!);}public static void main(String[] args) {Student s1 new Student();Student s2 new Student();}} 注意事项: (1) 静态代码块不管生成多少个对象其只会执行一次 (2) 静态成员变量是类的属性因此是在JVM加载类时开辟空间并初始化的 (3) 如果一个类中包含多个静态代码块在编译代码时编译器会按照定义的先后次序依次执行(合并) (4) 实例代码块只有在创建对象时才会执行 本次内容就到此啦欢迎评论区或者私信交流觉得笔者写的还可以或者自己有些许收获的麻烦铁汁们动动小手给俺来个一键三连万分感谢 !
- 上一篇: 艺术学院网站建设网站建设最低要求
- 下一篇: 易名网阿里云网站建设优化
相关文章
-
艺术学院网站建设网站建设最低要求
艺术学院网站建设网站建设最低要求
- 技术栈
- 2026年04月20日
-
艺术公司网站定制中心青岛网站建设详细内容
艺术公司网站定制中心青岛网站建设详细内容
- 技术栈
- 2026年04月20日
-
义乌做站外推广的公司邯郸网站制作公司
义乌做站外推广的公司邯郸网站制作公司
- 技术栈
- 2026年04月20日
-
易名网阿里云网站建设优化
易名网阿里云网站建设优化
- 技术栈
- 2026年04月20日
-
易名域名解析到手机网站百拓公司做网站怎么样
易名域名解析到手机网站百拓公司做网站怎么样
- 技术栈
- 2026年04月20日
-
易名中国域名门户网站简单免费模板
易名中国域名门户网站简单免费模板
- 技术栈
- 2026年04月20日






