构造器

构造器:在实例化的一个对象的时候会给对象赋予初始值,因此我们可以通过修改构造器,来改变对象的初始值,构造器是完成对象的初始化,并不是创建对象

我们也可以创建多个构造器实现不同的初始化,即构造器的重载

默认初始化:

  • 数字: 整形是0 浮点型是0.0
  • char:u0000
  • boolean:false
  • 引用: null

一个类即使什么也不写,它的class文件也会自带一个构造方法,这个方法也叫构造器;当然我们也可以直接在java文件里写一个构造器

构造器的规则:

  • 方法的名字必须和类名相同
  • 不能有返回值 也不能写void

构造器的作用:

  • 使用new的时候必须要有构造器,本质是在调用构造器
  • 构造器一般用来初始化值

默认的无参构造器:(下图为隐式无参构造)



修改后的无参构造器:(下图为显式无参构造)

有参构造:

一旦定义了有参构造,无参构造就必须显式定义,否则new一个无参的对象时会报错

有参构造的使用如下图:

对象创建的流程: (下图出自B站韩顺平教育,韩老师yyds!!)

  1. 加载Person类信息(Person.class)
  2. 在堆中分配空间
  3. 完成对象初始化
    1. 默认初始化age=0 name=null
    2. 显示初始化 age=90,name=null
    3. 构造器的初始化 age=20,name=“小倩”
    4. 把对象在堆中的地址返回给 p(p是对象名,也可以是对象的引用)


this

先来一个小实验:



这时候this就很有用了。使用this可以解决构造器中的age、name是局部变量而不是属性的问题

再来一个小实验:



结论:当我们new了很多个对象时,每个对象都有自己的this,this指向堆中的对象本身,简单来说,那个对象调用,this就代表哪个对象

this的注意事项和使用细节:

  • this关键字可以用来访问本来的属性、方法、构造器
  • this用于区分当前类的属性和局部变量
  • 访问同类中其他方法的语法:this.方法名(参数列表);
  • 访问构造器语法:this(参数列表)(参数列表不用写参数类型);注意只能在构造器中使用,且必须是第一条语句(即只能在构造器中访问另外一个构造器)
  • this不能再类定义的外部使用,只能在类定义的方法中使用

包机制

包的本质就是创建文件夹来存放类

一般利用域名倒置作为包名

定义包:package pkg1.pkg.2 必须写在最上面 package是关键字;一个类中最多只有一个package

为了使用某个包的成员,需要在java程序中导入这个包 用import pkg1.pk2 import必须在定义包的下面 如: import com.ohj.* 导入com.ohj这个包下所有的类;

若使用两个包中相同名字的类时,第一个使用的类import导入包,第二个使用的类不能通过import,而是通过直接通过路径加上类来使用

使用哪个类,就导入哪个类,不建议用 *

包命名规范:

  • 包名只能是数字、字母、下划线、小圆点,数字不开头,不能是关键字
  • 一般都是小写
  • 一般写成: com.公司名.项目名.业务模块名

常用的包:

  • java.util.* //util包,系统提供的工具包,工具类
  • java.net.* //网络包,网络开发
  • java.awt.* //做java页面开发的,GUI

访问修饰符

访问修饰符用于控制方法和属性以及类的访问权限,分为4种:

  • public:公开级别,对外公开
  • protected:受保护级别,对子类和同一个包中的类公开
  • default:默认级别,直接没有修饰符号就是default,向同一个包中的类公开
  • private:私有级别,只有类本身可以访问,不对外公开,外面需要通过get、set方法来进行使用

方法和属性的修饰符能用上面的四种,但是类的只能用public和默认


封装

封装的好处:

  • 隐藏实现细节
  • 可以对数据进行验证,保证安全合理

封装也就是避免直接访问对象中数据的实际表示,通过操作接口来访问

封装大多数是对于属性来进行操作的,也就是属性私有,关键字private;通过封装可以让别的类无法使用自己的私有属性。

通过在设置属性的时候在前面加上private关键字 让属性变得私有。

private与public 是对立的

既然属性已经私有了,那么别的类想用这个属性的时候,必须在属性所在的类里提供一些可以操作这个属性的方法,也就是get和set

get:可以获得这个属性 get的时候也有驼峰命名法,规则就是get+大写属性的一个字母

set:可以给这个属性设置值 set的时候也有驼峰命名法,规则就是set+大写属性的一个字母 set方法是void类型,且必须要有个参数

若定义了有参构造器,有参构造器避开了set方法,避开了数据的验证,那么我们可以在有参构造器中调用set方法,这样数据就不会通过构造器规避了数据验证

我们可以通过在set方法里设置一些判断,来规避掉不合理的值

操作如下图:



封装可以提高程序的安全性,保护数据;可以隐藏代码的实现细节;统一了接口也就只用get、set

3.2 构造器、this、包机制、访问修饰符、封装的更多相关文章

  1. java的访问控制(包、访问修饰符、修饰符)

    一.     java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...

  2. static,final,包,访问修饰符,内部类

    static 关键字可以修饰成员变量,被static修饰的成员变量归属于类static关键字可以修饰成员方法:被static修饰的成员方法可以直接使用类名调用,也可以通过对象调用,建议使用类名.非静态 ...

  3. IT第九天 - 包、访问修饰符、变量的内存分配、String类中常用方法

    IT第九天 上午 包 1.包的命名规则:域名.项目名称.模块名 2.如:Wfei.com.windows.login 访问限制符 1.四种访问限制符分别对应为: (1)default:默认的,默认为p ...

  4. 【译文】 C#面向对象的基本概念 (Basic C# OOP Concept) 第一部分(类,对象,变量,方法,访问修饰符)

    译文出处:http://www.codeproject.com/Articles/838365/Basic-Csharp-OOP-Concept 相关文档:http://files.cnblogs.c ...

  5. JAVA中的访问修饰符和包

    一.JAVA访问修饰符 访问修饰符,用来控制类中成员的可见性 有四个访问修饰符,分别是:default,private,public,protected 1.default(默认):默认权限,不用写的 ...

  6. java:包、继承,访问修饰符

    包 包(package) 用于管理程序中的类,主要用于解决类的同名问题.包可以看出目录. 包的作用 [1] 防止命名冲突. [2] 允许类组成一个单元(模块),便于管理和维护 [3] 更好的保护类.属 ...

  7. Java基础内部类、包的声名、访问修饰符、代码块整理

    内部类 14.1内部类概念 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类与局部内部类. 我们定义内部类时,就 ...

  8. Java包、权限访问修饰符、封装性

    包 概念: 物理上是文件夹:逻辑上是有逻辑关系的类的集合 作用: 避免类重名:控制访问权限 命名规范: 在包名中,可以使用.号来区分包的级别:包名一般情况下是小写 第一级 指该项目的类型,如com,o ...

  9. C#继承机制 继承与访问修饰符

    继承与访问修饰符 访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性.类的继承中有四个访问修饰符: public protected internal private.使用这些访问修饰符可指定 ...

  10. java入门---修饰符&访问修饰符&非访问修饰符

        Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符     修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class ...

随机推荐

  1. Mysql 的用户权限等操作管理与设置(创建、授权、修改、查看)

    注:请在 MySql 的客户端操作 1.创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password';//例 CREATE USER 'use ...

  2. Crypto入门 (七) Railfence (栏栅密码,正常型和W型)

    前言: Crypto中分三类,分别是编码.古典密码.现代密码,栏栅密码属于古典密码中得特殊移位密码,密钥只有 一个k,表示栏栅得长度.所谓栏栅密码就是将要加密得明文分成k个一组,然后取每组得第一个字符 ...

  3. 【cs231n】knn作业笔记

    完成了assignment-1中knn相关内容的作业,记录一下遇到的知识点和问题 knn.ipynb的内容大致包括: 1.数据集的建立 主要是通过切片函数,如下图选取前5000张图片和其标记作为训练数 ...

  4. Hyper-V 直连主机USB设备

    因为授权问题不让用 Vmware 了.所以换成微软自带的 Hyper V 但是碰到一个很头痛的问题,就是外部设备没法像 Vmware 那样直接连接到虚拟机里面,很多第三方设备没法调试了. 找了很久终于 ...

  5. redhat7.6配置本地yum源

    redhat7.6配置本地yum源 将光盘或者iso文件挂载到 /mnt 目录下 查看配置文件 [root@zqds122 mnt]# cat /etc/yum.repos.d/rh7ISO.repo ...

  6. 使用Python+Appium+夜神模拟器,并连接uiautomatorviewer

    本文不介绍安装步骤,实在是太多博文了 一.安装 Python:3.8 Appium:1.22.3 夜神模拟器 node JDK1.8 SDK 二.成功连接模拟器 PytCharm代码如下: # cod ...

  7. 1--我们写了一个java类,那么生成一个对象占用多大的内存?

    public class Student { private long id; private long userId; private byte state; private long create ...

  8. Markdown操作方法

    Markdown学习 标题 三级标题 四级标题 字体 原本 hello,world! 斜体 hello,world! 加粗 hello,world! 斜体加粗 hello,world! 删除 hell ...

  9. final修饰的作用

    在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量) 1.final修饰类 当用final修饰一个类时,表明这个类不能被继承. final类中的成员变量可以根据需要设为f ...

  10. Android笔记--发送彩信

    发送彩信 界面还是那个界面,图片也实现了从相册进行选择图片,选择完成之后,就会回到界面里面的功能: 下面接着实现发送彩信的完整版: 具体实现如下: 界面代码不再展示,主要着重于后台的代码编写啦! 1. ...