我们已经讲过一期类与对象了,如果你还没有看,恰好你对类与对象又不是很懂,建议你先去看一下再过来!

传送门—> Java的类与对象——你真的懂了吗?.

上一期我们主要讲了类与对象的一些关系以及组成,这一期我们来讲创建类涉及到的一些关键字,涉及到封装的部分重点,接下来正文开始

目录

  • staic关键字
    • 1.修饰变量
    • 2.修饰方法
    • 3.定义mian时为什么要使用static?
  • this 关键字
    • 1.this.变量名
    • 2.this.方法
    • 3.this()访问构造方法
  • 访问控制修饰符
    • 1. private
    • 2. friendly(默认)
    • 3. protected
    • 4. public
  • 结言

staic关键字

static的汉语意思是静态的,它在Java中的作用也是差不多的。

其实static主要是帮助程序员来管理内存的,static关键字可以使用在变量,方法,块中。

接下来你要记住这么一句话: static关键字属于类,而不是类的实例

带着搞清楚这句话的目的去阅读下面的文章,你将会事半功倍!

1.修饰变量

static修饰变量只需要把static加在该变量类型前面就行了如下:
y哦那个是

static int a=10;

变量被static修饰后变量有什么变化呢?

变量被static修饰后该变量属于它所在的类,被实例化产生对象时该变量还是属于类,不属于对象。

1.当在其它类里面需要调用被static修饰的变量时只需要直接使用类名来调用,不需要实例化用对象来调用,如下:

class Baibai{int a=5;static String s="hello,baibai!";
}public class Text_0 {public static void main(String[] args){//      报错:java: 无法从静态上下文中引用非静态 变量 a
//      System.out.println(Baibai.a);#因为变量a是非静态的System.out.println(Baibai.s);}
}

运行结果为:
hello,baibai!

如果我们创建对象来引用静态变量,也是可以实现的但是会有警告,所以不要使用对象来引用静态变量

2.对静态变量进行更改时,它的值就真正的发生了变化(因为它属于类,只有一个它);而其他普通变量属于对象,对它的量改变时只改变了它所对应对象的它的量(注意:不要被绕进去,仔细理一理)如下:

class Baibai{int a=5;static String s="hello,baibai!";
}public class Text_0 {public static void main(String[] args){Baibai B = new Baibai();System.out.println(B.a);
//B.s会出现警告,这里单纯为了测试使用,平时千万不要用对象来引用静态变量System.out.println(B.s);System.out.println(Baibai.s);B.a=10;B.s="123";Baibai B1 = new Baibai();System.out.println(B1.a);System.out.println(B1.s);System.out.println(Baibai.s);}
}

运行结果为:
5
hello,baibai!
hello,baibai!
5
123
123

大家注意理解记忆

2.修饰方法

static修饰方法其实和修饰变量是类似的,有以下特点

静态方法属于类,而不属于类所实例化的对象
调用静态方法时,无需创建对象
静态方法只能访问静态数据成员,并且可以更改静态数据成员的值

废话不多说,直接上代码

class Baibai{int a=5;static String s="hello,baibai!";public static void Bai(){//      System.out.println(a);#报错:无法从静态上下文中引用非静态 变量 as="123";System.out.println(s);}public void Aai(){s="888";System.out.println(s);}
}public class Text_0 {public static void main(String[] args){System.out.println(Baibai.s);Baibai.Bai();
//        Baibai.Aai();#报错:无法从静态上下文中引用非静态 方法 Aai()Baibai B = new Baibai();B.Aai();}
}

运行结果为:
hello,baibai!
123
888

通过上面我们可以知道:

静态方法只可以访问静态变量, 不需要创建对象
普通方法可以访问普通的变量,也可以访问修改静态变量,不过需要创建对象

3.定义mian时为什么要使用static?

如果我们不加static,它能运行吗?

public class Text_0 {public  void main(String[] args){System.out.println(10);}
}

经过试验后得到答案是:不能

如果要使用非静态方法那我们就需要,创建对象来使用,而创建对象的地方又在main()内部,这属实是在套娃哇!

不能再绕了,再绕脑袋直接短路了。

至于main()为什么必须要static来修饰呢?

因为静态方法不需要类进行实例化

staic还能修饰块,这里就不细说了,等到块的时候一起讲

this 关键字

this 关键字是 很常见的关键字之一,它可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。

上面的如果不太懂,那你记住this代表当前对象就行;

1.this.变量名

如果类的某一变量被private修饰就代表了,这个变量不能被其他类所访问了,但是只要我们创建一个方法,在这个方法里面进行修改,我们就可以对它进行访问

class Baibai{private String s1 = "私有变量";public void text(String s){this.s1 = s;System.out.println(s1);}
}public class Text_0 {public static void main(String[] args) {Baibai B = new Baibai();B.text("1234");}
}

输出为:
1234

这里的this代表当前对象,也就是这里的B,他代表 B的访问这个私有的变量,这里其实就体现出来的Java的封装思想。

注意:这里的this是可以省略掉的,

//this.s1 = s;
s1=s;

你可以不写这个this. 但是你必须知道这个s1是属于当前对象的,并不是属于类

2.this.方法

方法其实和变量是同一个道理,我们之前学过想要调用一个类的方法就需要来对这个类进行实例化,然后用对象来调用

那我们在这个类的某一个方法中调用这个类的其他方法,是不是也要通过创建对象来时间呢?
我们所知道的是“调用一个类的方法就需要来对这个类进行实例化,然后用对象来调用”这句话没有错,说明的确需要对象来引用某类的方法,来具体看看
代码如下:

class Baibai{public void text(){System.out.println("text方法");}public void bai(){Baibai A = new Baibai();A.text();System.out.println("baibai!");}
}public class Text_0 {public static void main(String[] args) {Baibai B = new Baibai();B.bai();}
}

输出为:
text方法
baibai!

看来这样是对的,但是我们访问同一个类,确对该类例化了两遍,这不太好,就像你需要使用微信和QQ两个App,你需要为了这两个App来各准备一个手机吗?肯定不需要哇,没十年脑血栓都干不出这种事。

那我们如何来解决呢?

当然是用this啊!因为我现在就在讲this啊(手动狗头)
上代码:

class Baibai{public void text(){System.out.println("text方法");}public void bai(){this.text();System.out.println("baibai!");}
}public class Text_0 {public static void main(String[] args) {Baibai B = new Baibai();B.bai();}
}

这样就好了,既符合生活逻辑,又符合代码原则;

同样的这里的this也可以省略

//this.text();text();

但是你也要知道这个方法属于当前对象,而不是类。

3.this()访问构造方法

首先你得知道:

this()方法只能在构建方法中使用,不能在普通方法中使用
在构造方法中使用时,必须在第一行使用
this( )用来访问本类的构造方法,括号中可以有参数,如果有参数就是调用指定的有参构造方法,

如下:

class Baibai{public  Baibai(){this(2);System.out.println("构造方法");}public Baibai(int a){System.out.println("构造方法——"+a);}
}public class Text_0 {public static void main(String[] args) {Baibai B = new Baibai();}
}

输出为:
构造方法——2
构造方法

如果在构造方法中调用自己,那就属于是递归构造器了,这里不展开!

访问控制修饰符

首先我们得知道为什么要控制访问呢?

疫情期间,假如你要返校,你就得拿着24小时内的核酸报告来,学校审核通过之后才会让你进来。如果疫情期间,学校能随便出入,那万一有一个感染者进来岂不是麻烦大了

在程序中道理也是这样的,如果没有访问控制,写出来的东西复杂不复杂暂且不说。那我们什么都能访问了,万一不小心把父类方法里面的源码改掉,一切岂不是乱套了,整个语言被破坏了…所以我们写程序需要用到封装,它保证了程序的自身的稳定性

类的访问控制符只能是空(friendly)或者 public,方法和属性的访问控制符有 4 个,分别是 public、 private、protected 和friendly,其中 friendly 是一种没有定义专门的访问控制符的默认情况。

1. private

用 private 修饰的类成员,只能被该类自身的方法访问和修改,而不能被任何其他类(包括该类的子类)访问和引用。因此,private修饰符具有最高的保护级别。

class Baibai{private int a =5;private void text(){System.out.println("私有方法");}public void bai(){text();a=10;System.out.println(a);}
}public class Text_0 {public static void main(String[] args) {Baibai B = new Baibai();B.bai();}
}

就像这里对象 B 无法直接访问a与text()方法,但是我们可以通过留出来的bai()方法来访问,这完美的诠释了什么叫封装!!注意理解

2. friendly(默认)

如果一个类没有访问控制符,说明它具有默认的访问控制特性。这种默认的访问控制权规定,该类只能被同一个包中的类访问,而不能被其他包中的类使用。这种访问特性又称为包访问性(包内)。

同样的,类内的成员如果没有访问控制符,也说明它们具有包访问性。定义在同一个文件夹中的所有类属于一个包,所以前面的程序要把用户自定义的类放在同一个文件夹中(Java项目默认的包),以便不加修饰符也能运行。

3. protected

用保护访问控制符 protected 修饰的类成员可以被三种类所访问:该类自身、与它在同一个包中的其他类以及在其他包中的该类的子类。就看到这里其实它与friendly是一样的,但其实并不一样
使用protected 修饰符的主要作用,是允许其他包中它的子类来访问父类的特定属性和方法

4. public

当一个类被声明为 public 时,它就具有了被其他包中的类访问的可能性,只要包中的其他类在程序中使用 import 语句引入 public 类,就可以访问和引用这个类

结言

看完上面其实我们就可以想到,我们常用的println();其实也是如此,接下来给大家看个好玩的

Ps:我写java用的是IDEA,首先这个很好用,其次大学生可以申请学生认证来免费试用正版,还有自带的正版汉化包可以用,有一说一真的香

我们在IDEA中随便打开一个Java程序按住Ctrl然后点一下println
然后大家就会发现,我们的printin其实是这样的

大家可以发现为什么它会自动换行了,在按住Ctrl然后点一下print

你会发现这里又使用了write的方法,还可以一直点下去,最后你会发现,我们使用的方法,是好多原始方法封装,继承过来的,如果没有访问权限那就会很难做到这么有规律!!

个人理解,多谢指教!

【Java Se】封装与常用关键字相关推荐

  1. aide java 线程类_aide_Java常用关键字、方法使用实例

    aide_Java常用关键字.方法使用实例 1.== 与 equals ==: 基本类型:值相等 引用类型:地址相等(地址放在堆空间,注意常量池里的String值) equals: 运用于引用类型 在 ...

  2. java的封装和this关键字知识整理

    封装 封装概述 封装,是面向对象思想的特征之一.面向对象共有三个特征:封装,继承,多态. |------封装表现: 1.方法是最基本的封装体 2.类也是一个封装体. 封装的好处: 1.提高了代码的复用 ...

  3. appium java常用函数_AppiumLibrary常用关键字

    通过上一章节,open application关键字的使用,相信大家对手机自动化充满了兴趣,那么今天这一章节,主要介绍AppiumLibrary中常用关键字的使用. 一.实用函数 关键字 含义 实例 ...

  4. Java中的50个关键字

    2019独角兽企业重金招聘Python工程师标准>>> Java中的50个关键字 关键字也称为保留字,是指java语言中规定了特定含义的标示符.对于保留字,用户只能按照系统规定的方式 ...

  5. [转载] Java中的50个关键字

    参考链接: Java平台如何独立 Java中的50个关键字 关键字也称为保留字,是指java语言中规定了特定含义的标示符.对于保留字,用户只能按照系统规定的方式使用,不能自行定义.Java中有50个常 ...

  6. JAVA SE、EE、ME,JRE、JDK,基本数据类型,访问修饰符、函数、封装的概念、UML类图、构造方法、this关键字、static关键字、方法重载、方法重写、包(packahe)

    运行第一个JAVA程序: 这里使用的开发环境是eclipse,新建一个java工程,然后可以看到src这个是存放java代码的地方,然后在src文件右击新建一个class(类),然后可以看到下图,同样 ...

  7. 【Java SE】封装的详解

    篮球哥温馨提示:编程的同时不要忘记锻炼哦! 因为热爱,所以编程 目录 1.封装 1.1 什么是封装? 2.2 访问权限 2.3 private 简单使用 2.封装之包的概念 2.1 什么是包? 2.2 ...

  8. 【Java Se】常用工具类之多线程

    前言 到多线程这一块说明我们[Java Se]专栏就快结束了,感谢一直看过来的兄弟.多线程其实是非常复杂的,我们只是学一个入门,知道有这么个东西并且怎么运用它! 目录 前言 初识多线程 线程的创建 T ...

  9. Java SE 常用类:枚举enum

    Java SE 常用类:枚举enum 1.enum 枚举 表示一种事物的所有可能|一种类型的所有情况. 软件包 java.lang 注意: 枚举类型不能自定义实例化,实例由程序猿|枚举类型自己提供,因 ...

最新文章

  1. CNN网络中的 1 x 1 卷积是什么?
  2. python3.5怎么安装pip-在python3.5中使用pip
  3. 列举java接口_Java接口特点列举说明
  4. java 日志框架 详解_java日志框架系列(9):logback框架过滤器(filter)详解
  5. Ubuntu常用终端快捷键
  6. 分布式:阿里云HSF转dubbo+zookeeper
  7. linux fedora设置开机自动挂载win磁盘
  8. Redis的session管理和Memcached的session管理不同
  9. 展望2018:WebRTC和下一代编解码器
  10. problem b: 一年中的第几天_第九届蓝桥杯B组试题
  11. 关于arp.exe的一点应用
  12. 数据结构—链表-单链表应用-删除元素最大的节点
  13. 【转】xPath语法介绍
  14. ie浏览器修复_IE 11浏览器被爆严重漏洞,Windows系统均有中招风险!
  15. Java内部类访问局部变量时的final问题
  16. 大学应用计算机应用基础课程介绍,大学计算机应用基础(Windows 7+Office 2010)(刘艳)...
  17. 关于整车上下电流程和电源管理
  18. python是高级语言还是低级语言_作为一名程序员必需知道的术语:高级/低级语言?解释/编译语言?...
  19. 学习笔记5(类和对象)
  20. jieba分词 自定义词表简介

热门文章

  1. linux的signal_pending及signal
  2. 大家注意了!!2013年火车-票网络…
  3. IDA Pro 内存Dump脚本插件
  4. 踩坑:preventDefault
  5. html文件中加入断点,HTML添加断点
  6. Ensemble Learning常见方法总结(Bagging、Boosting、Stacking、Blending)
  7. 命名空间messages_System.Messaging
  8. SMO优化算法(Sequential minimal optimization)
  9. 用Python实现城市方向熵的计算
  10. 音视频学习(十一)——H265视频码流