• Java封装之this关键字、static关键字、包简述


    1、this关键字

    代码示例:

    1. class Student
    2. {
    3. private int age;
    4. String name;
    5. double score;
    6. Student(){ //java语言中,方法(没有返回值)是可重载的,函数名即Student可以一样,但是参数列表不同,这在C语言中确是不允许的
    7. System.out.println("构造方法1被调用");
    8. }
    9. Student(int newage, String newname){
    10. System.out.println("构造方法2被调用");
    11. age = newage;
    12. name = newname;
    13. }
    14. Student(int age, String name, double score){
    15. //this(); 这里使用this调用构造方法,只能调用其中一中,不能同时调用多种
    16. this(12, "we");//5.在类的构造方法中可以调用this([参数列表])来调用该类的指定构造方法,但不能同时调用该类的构造方法
    17. System.out.println("构造方法3被调用");
    18. this.age = age; //3.使用this可以处理方法中的成员变量和形参同名的问题
    19. this.name = name;
    20. this.score = score;
    21. }
    22. void testThis(){
    23. Student stutmp = null;
    24. stutmp = this; //2.this可以看作是一个变量,它的值是当前对象(即stu3)的引用
    25. System.out.println(stutmp.age);
    26. System.out.println(this.name); //1.在类的方法中,使用this关键字代表的是调用此方法对象的引用
    27. //4.当在方法内需要用到调用到该方法的对象时,就可以用this
    28. }
    29. void introduce(){ //方法=函数
    30. System.out.println("name:"+name+", age:"+age+", score:"+score);
    31. }
    32. }
    33. public class Demo1 {
    34. public static void main(String[] args) {
    35. Student stu3 = new Student(24, "kobe", 89.0);
    36. stu3.introduce();
    37. stu3.testThis();
    38. }
    39. }

    运行结果:

    构造方法2被调用
    构造方法3被调用
    name:kobe, age:24, score:89.0
    24
    kobe

    2、static关键字

    2.1 static关键字的特点:

    (1)用来修饰类的成员 ——修饰成员变量的称为类变量(静态变量)

    (2)修饰成员方法称之为类方法(静态方法)

    (3)当类被加载时就会被加载(静态方法与静态变量),优先于对象的存在

    (4)用来修饰语句块——称之为静态代码块,先于构造方法之前执行,只会执行一次,用来对静态成员做初始化

    (5)调用的时候可以直接通过类名.成员来进行访问

    2.2 static关键字的注意事项:

    (1)静态方法中不能出现this关键字

    (2)静态方法中只能访问外部的静态成员

    代码示例:

    1. class Student
    2. {
    3. private int age;
    4. String name;
    5. double score;
    6. static int data;
    7. Student(int age, String name, double score){
    8. System.out.println("构造方法3被调用");
    9. this.age = age;
    10. this.name = name;
    11. this.score = score;
    12. }
    13. static{ //用来修饰语句块-称之为静态代码块,先于构造方法之前执行,只会执行一次,用来对静态成员做初始化
    14. System.err.println("静态代码块");
    15. data = 10;
    16. System.err.println("data="+data);
    17. }
    18. static void test(){
    19. //System.out.println(this.age); //1.静态方法中不能出现this关键字
    20. System.err.println(data); //2.静态方法中只能访问外部的静态成员
    21. }
    22. void introduce(){ //方法=函数
    23. System.out.println("name:"+name+", age:"+age+", score:"+score);
    24. }
    25. }
    26. public class Demo1 {
    27. static int add(int data1, int data2){ //当类被加载的时候就会被加载,静态方法也是优先于对象的存在
    28. return data1 + data2;
    29. }
    30. public static void main(String[] args) {
    31. Student stu3 = new Student(24, "kk", 89.0);
    32. Student.data = 100; //调用的时候可以直接通过类名.成员来进行访问,同时优先于对象存在即可以不依赖于对象来访问,当类被加载时就会被加载
    33. Student.test(); //静态成员变量优先于对象存在,静态成员函数亦是是如此
    34. System.out.println("data="+Student.data);
    35. System.out.println("ret="+add(8, 24));
    36. }
    37. }

    运行结果:

    静态代码块构造方法3被调用

    data=10
    100

    data=100
    ret=32

    3、方法重载

    多数程序设计语言要求为每个方法(函数)提供一个独一无二的方法名,不存在方法重载的概念,在Java中,规定方法签名是解析方法的规则而不是方法名,为方法重载开创了条件。方法重载使得在同一个类中,方法名相同而参数列表不同的方法可同时存在,代表相似的行为或功能。

    方法重载(overload)概念:同一个类中,同名不同参的方法称为重载方法。注意:仅有返回值不同的方法不能称为重载                

    4、包(package)

    打包的意义

    (1)标准Java库是由一系列包组成,包括java.lang java.util java.net等等

    (2)标准Java包就是层次型包结构,就如同硬盘上嵌套的子目录一样,我们也可以使用嵌套层次结构来组织包

    (3)Java包是为了更好的规划代码,防止命名冲突和混乱,所以Java出现了打包机制

    (4)当把类组织起来放进一个包内时,也就给包中的成员赋予了相互访问的权限,用户就拥有了该包内的程序代码

    (5)包权限把该类聚集在一个包中这一做法提供了意义和理由

    Java包package----声明

    (1)Java程序猿都可以编写属于自己的Java包,为了保证包名唯一性,要求程序猿在自己定义包的名字前加上唯一前缀

    (2)由于互联网上的域名称不会重复,所以推荐采用公司在互联网上的域名倒置作为包的唯一前缀

    一个类可以使用同一个包中的所有类,一个类可以使用其他包中的所有公开类,使用方法如下:

    (1)在每个类签名加上完整包名,例如:java.util.Data today = new java.util.Data()

    (2)常用也是更简洁更通用的方式,使用import语句导包(eclipse-->ctrl+shift+o):

    import java.util.Data;

    ...

    Data today = new Data();

    (3)可以import特定类,也可以导入整个包。通过源文件顶部(打包语句后)使用import语句来实现import java.util.*

    package com.zhangkun.learnDemo1.java代码:

    1. package com.zhangkun.learn;
    2. import com.zhangkun.use.*;;
    3. public class Demo1 {
    4. public static void main(String[] args) {
    5. Demonew Dn = new Demonew();
    6. Dn.age = 24;
    7. Dn.name = "zhangkun";
    8. Dn.printData();
    9. Dn.printInfo();
    10. // com.zhangkun.use.Demonew Dn2 = new com.zhangkun.use.Demonew();
    11. //
    12. // Dn2.name = "zhangkun";
    13. // Dn2.printData();
    14. // Dn2.printInfo();
    15. /*一个类可以使用同一个包中的所有类
    16. * 一个类可以使用其它包中的所有公开类(public)
    17. * 尽量避免使用同一类名
    18. * 使用其它包中的公开类:
    19. * 1.com.zhangkun.use.Demonew Dn2 = new com.zhangkun.use.Demonew();加上完整包名
    20. * 2.import导入包(eclipse: ctrl+shift+o)
    21. * */
    22. }
    23. }

     运行结果:

    同一个包age=24
    同一个包name=zhangkun
    ​​​​​​​

    package com.zhangkun.learnDemonew.java代码:

    1. package com.zhangkun.learn;
    2. public class Demonew {
    3. int age;
    4. String name;
    5. void printData(){
    6. System.out.println("同一个包age="+age);
    7. }
    8. void printInfo(){
    9. System.out.println("同一个包name="+name);
    10. }
    11. }

     package com.zhangkun.useDemonew.java代码: 

    1. package com.zhangkun.use;
    2. public class Demonew {
    3. public String name;
    4. public int age;
    5. public void printInfo(){
    6. System.out.println("name="+name);
    7. }
    8. public void printData(){
    9. System.out.println("age="+age);
    10. }
    11. }

    注意:从Demo1.java中可以看出,在类名相同情况下,import导包想要调用com.zhangkun.use包中的方法,这是无法实现的,编译器默认调用同一个包内的方法,此时import导包无效。若要调用com.zhangkun.use包中方法及成员变量,必须添加完整的包,即:com.zhangkun.use.Demonew Dn2 = new com.zhangkun.use.Demonew();

  • 相关阅读:
    Python网络爬虫项目开发实战:如何解决验证码处理
    Z-Fighting问题解决(二) - Reverse-z
    linux笔记:MOOC Linux开发环境及应用
    Jetpack Compose(3) —— 状态管理
    企业内业务系统与Activiti流程引擎的结合(十二)
    基于Electron27+Vite4+React18搭建桌面端项目|electron多开窗口实践
    计算机毕业设计之校园二手交易平台
    高新技术企业领域划分
    【C++】C++11——右值引用和移动语义、左值引用和右值引用、右值引用使用场景和意义、完美转发、新的类功能
    【linux】buildroot编译后同步脚本(开启自动联网、开启SSH免密登录)
  • 原文地址:https://blog.csdn.net/weixin_47861286/article/details/125905119