面向对象的三大特征之一:封装
-
什么是封装?
就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去
-
封装的设计规范
合理隐藏,合理暴露
-
公开成员,可以使用public(公开)进行修饰
隐藏成员,使用private(私有、隐藏)进行修饰
实体类javaBean(实体类)
什么是实体类(用来保存某个事物的数据,就是一种特殊形式的类)
- 这个类中的成员变量都要私有,并且要对外提供相应的getxxx,Setxxx方法
- 类中必须要有一个公共的无参的构造器
- 仅仅只是一个用来保存数据的Java类,可以用它创建对象保存某个事物的数据
- 实体类对应的是软件开发里现在比较流行的开发方式,数据和数据的业务处理相分离
成员变量和局部变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中,方法外 | 常见于方法中 |
初始化值不同 | 有默认值,不需要初始化赋值 | 没有默认值,使用前必须赋值 |
内存位置不同 | 堆内存 | 栈内存 |
作用域不同 | 整个对象 | 在所归属的大括号中 |
生命周期不同 | 与对象共存亡 | 随着方法的调用而生,随着方法运行结束死亡 |
常用API
API(全称 APPlication Programming Interface:应用程序编程接口)
什么是包?
包是用来分门别类的管理各种不同程序的,类似于文件夹,建包有利于程序的管理和维护
在自己的程序中调用其他包下的程序注意事项
- 如果当前程序中,要调用自己所在包下的其他程序,可以直接调用(同一个包下的类,互相可以直接调用)
- 如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包,才可以访问,导包格式:import 包名.类名
- 如果当前程序中,要调用java提供的程序,也需要先导包,才可以使用,但是java.lang包下的程序是不需要我们导包的,可以直接使用
- 如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问
String
String概述,常用方法介绍
String创建对象封装字符串数据的方式
-
方式一:java程序中的所有字符串文字(例如"abc")都为此类对象
String name = “张三”;
String SchoolNAME = “武汉交通”;
-
方式二:调用String类的构造器初始化字符串对象
构造器 | 说明 |
---|---|
Public String | 创建一个空白字符串对象,不含任何内容 |
Public String (String original) | 根据传入的字符串内容,来创建字符串对象 |
Public String (char[] chars) | 根据字符数组的内容,来创建字符串对象 |
Public String (byte[] bytes) | 根据字节数组的内容,来创建字符串对象 |
- 方式一:直接使用双引号"…"
- 方式二:new String类,调用构造器初始化字符串对象
String提供的操作字符串数据的常用方法
方法名 | 说明 |
---|---|
Public int length() | 获取字符串的长度返回(字符个数) |
Public char charAt(int index) | 获取某个索引位置处的字符返回 |
Public char[] toCharArray() | 将当前字符串转换成字符数组返回 |
Public boolean equals(object anobject) | 判断当前字符串与另一个字符串的内容一样,一样返回true |
Public String Substring(int beginIndext,int endIndex) | 根据开始和结束索引进行截取,得到新的字符串(包前不包后) |
Public String Substring(int beginIndex) | 从传入的索引处截取,截取到末尾,得到新的字符串返回 |
Public String replace(charSequence target,charSequence replacement) | 使用新值,将字符串中的旧值替换,得到新的字符串返回 |
Public boolean contains(charSequence s) | 判断字符串中是否包含了某个字符串 |
Public boolean StartsWith(String prefix) | 判断字符串是否以某个字符串内容开头,开头返回true,反之返回false |
Public String[] split(String regex) | 把字符串按照某个字符串内容分割,并返回字符串数组回来 |
String注意事项
1. String的对象是不可变字符串对象
注意:只要是以"…"方式写出的字符串对象,会在堆内存中的字符串常量池中存储
Public static void main(String[] args) {
String name = "java";
name+="程序员";
name+="张三";
System.out.println(name);
}
结论:
每次试图改变字符串对象实际上是新产生了新的字符串对象,变量每次都是指向了新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象是不可变的
2. String的第二点注意事项
- 只要是以"…"方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份
- 但通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中
- 变量+运算在运行时确实(堆中),字符串字面量+运算在编译时确定(常量池中)
String测试题
Public class Test1 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "a"+"b"+"c";
System.out.println(s1==s2); // true
java存在编译优化机制,程序在编译时:"a"+"b"+"c"会直接转成"abc",以提高程序的执行性能
}
}
Public class Test2 {
public static void main(String[] args) {
String s1 = "abc"; // 常量池中
String s2 = "ab";
String s3 = s2+"c"; // 堆内存中
System.out.println(s1==s2); // false
}
}