day12_封装_this_构造方法_API_String类

  • 封装
  • 构造方法
  • API
  • String

封装

概述

将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

封装步骤

private含义

  1. private是一个权限修饰符,代表最小权限。
  2. 可以修饰成员变量和成员方法。
  3. 被private修饰后的成员变量和成员方法,只在本类中才能访问。
    既然可以在本类中访问, 便可以在本类中创建两个方法, 一个可以得到private修饰的成员变量, 一个可以改变private修饰的成员变量.. 习惯性取名为 getXXX() ,setXXX(xxx)
    setXXX 传递了参数后,修改了堆内存中的值,不需要返回值,
    getXXX 是为了得到数据值,所以需要返回值
    这样就可以在set和get方法内部进行逻辑判断

this关键字和构造方法

this关键字

  • 使用原因
    定义方法时参数列表的参数名称可以随便起, 所以容易和成员变量名称重名, (系统就近原则在方法内部使用变量时,会先找方法内部的局部变量, 所以会找不到成员变量)

  • 使用方法:(IDEA中有快捷键 alt+insert)
    直接使用
    this.变量名
    this代表的是 哪个对象调用的方法, 方法内部的this就代表该对象
    比如 用 p.sayHello() sayHello()方法内部的this 就是 p 打印 this 就是打印p 就是对象的地址值

注意
每当对象对用成员方法时, 在栈内存会有成员方法空间, 在这个空间内部会隐藏有this内存空间,谁调用这个方法, this内部就会储存这个对象的地址值
使用对象调用方法时, 方法内部隐藏有this,用来接收调用该方法的对象的地址值,如果需要使用this, 直接用.(每个方法内部都含有this,哪个对象调用该方法,this就是这个对象)

一般this 在定义对象方法时使用较多

this图解

封装思想【理解】
1.封装概述 是面向对象三大特征之一(封装,继承,多态) 是面向对象编程语言对客观世界的模拟,客观世界里成员变
量都是隐藏在对象内部的,外界是无法直接操作的
2.封装原则 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操
作和访问 成员变量private,提供对应的getXxx()/setXxx()方法
3.封装好处 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性

构造方法

  • 作用
    通过new关键字 调用构造方法,
    通过构造方法给成员变量赋值

只要new一个对象, 就会调用构造方法.
其实是为了给成员变量赋值,

  • Scanner sc = new Scanner(System.in);
    每次new一个对象的时候, 后边儿的 Scanner() 其实就是调用的方法, 这个方法叫构造方法

  • 构造特点:
    1.修饰符中没有static
    2.没有返回值类型,连void也没有
    3.构造方法名和类名保持一模一样
    4.return;可以省略

  • 注意事项
    1.如果你不提供构造方法,系统会给出无参数构造方法。
    2.如果你提供了构造方法,系统将不再提供无参数构造方法(只要自己提供了构造方法, 就要提供无参构造方法)。
    3.构造方法是可以重载的,既可以定义参数,也可以不定义参数。
    4.构造方法名字和类名保持一致,且只有修饰符和方法名

定义一个标准的java类
要求:
1.所有成员private修饰
2.提供get和set方法
3.提供空参和满参构造方法

构造方法IDEA快捷键 alt+insert

构造方法与set和get方法区别

  • 构造方法是在new的同时进行使用的, 也就是说 是在一个新的对象上进行使用, 而set和get是在同一个对象上进行赋值和获取
  • 对象类中在定义成员变量时,如果直接赋值, 就相当于每次创建一个新的对象的时候都有默认值, 不符合逻辑
  • 使用构造方法更改赋值,其实是new了一个新对象重新赋值, 这样会使原本的对象变成垃圾回收, 真实开发中,使用setxxx方法较多,方便

标准代码——JavaBean

JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的
构造方法,提供用来操作成员变量的 set 和 get 方法。

API

应用程序编程接口
JAVA中的API 其实是程序员的字典

看包名, 类名, 构造方法, 方法和返回类型

String 类

概述

字符串是常量, 只要被创建,就不能被改变, 只要有改变, 就是创建了新的字符串
所有被双引号""引起来的内容, 都作为字符串String类的实例对象

特点

  1. 字符串不变:字符串的值在创建后不能被更改。
  2. 因为String对象是不可变的,所以它们可以被共享。

String s1 = "abc";
String s2 = "abc";

// 内存中只有一个"abc"对象被创建,同时被s1和s2共享。

  1. "abc" 等效于 char[] data={ 'a' , 'b' , 'c' } ,但是底层原理是字节数组( byte[] )
    (jdk8以前String内部是用的是字符数组,之后用的是字节数组)

字符串常量存放在常量池中, 先检查常量池, 如果具有一模一样的字符串 , 就直接指向, 不会创建新的具有内存地址并且装有新字符串的内存空间

String类的构造方法

  • 常用的构造方法

方法名 说明
public String() 创建一个空白字符串对象,不含有任何内容,相当于"";
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(byte[] bys) 根据字节数组的内容,来创建字符串对象
String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc

  • 创建字符串对象两种方式的区别【理解】
    1.使用new关键字创建字符串对象: 只要new就会在堆内存中开辟空间.所以赋值给的变量接收的是在堆内存中空间地址值,此在堆内存中的空间存放有常量池字符串地址值;
    2.使用""写的字符串常量的形式:字符串常量在常量池中,所以赋值给的变量接收的是常量池里的地址;

只要赋值运算符, 如 s6 = s6+s1, 都是在堆内存中进行了new String()的操作
只要new 就是在堆内存中开辟具有地址值的内存空间, 存放的是在常量池字符串地址

只要使用""创建的字符串都在常量池里, 只要在常量池里的字符串, 都要先进行一遍检索, 如果有相同的字符串, 内存地址值都是一样的,不会产生新的

字符串的比较:==号和equals的作用

==比较基本数据类型:比较的是具体的值
==比较引用数据类型:比较的是对象地址值
equals比较String类型: 比较的是对象的内容是否相同,区分大小写(eauals是String类的成员方法)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容