- 封装
- 构造方法
- API
- String
封装
概述
将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
封装步骤
private含义
- private是一个权限修饰符,代表最小权限。
- 可以修饰成员变量和成员方法。
- 被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类的实例对象
特点
- 字符串不变:字符串的值在创建后不能被更改。
- 因为String对象是不可变的,所以它们可以被共享。
String s1 = "abc";
String s2 = "abc";
// 内存中只有一个"abc"对象被创建,同时被s1和s2共享。
- "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类的成员方法)
网友评论