java学习(5) -- 面向对象思想
java(5)
面向对象与面向过程的思想对比
面向对象主要以对象为主,赋予过程
面向过程不需要以对象尾注,注重过程
类和对象
什么是类
类是对现实生活中一类具有共同属性和行为的事物的抽象
类是对事物,也就是对象的一种秒速,可以将类理解为一张设计图,根据设计图,可以创建出具体存在的事物
类的定义和组成
类的组成: 属性和行为
-
属性
该事物的各种特性,在代码中通过成员变量来体现(类中方法外的变量) -
行为
该事物存在的功能,在代码中通过成员方法来体现
package hzj;
import javax.swing.*;
import java.util.Random;
import java.util.Scanner;
public class DemoScanner {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.name);
System.out.println(s); // hzj.Student@d716361 @后面的是内存地址 @前面是全类名,包名+类名
}
}
class Student{
String name = "hzj";
int age = 12;
}
单个对象的内存图
多个对象的内存图
两个引用指向同一个对象内存图
垃圾回收
当堆内存中,对象或数组产生的地址,通过任何方式都不能被找到后,会被判定为内存中的垃圾
垃圾会被java垃圾回收期,空闲的时候自动进行清理
成员变量与局部变量
成员变量 类中方法外的变量
局部变量 方法中的变量
class Student{
String name = "hzj"; // 成员变量
public void desc(){
String name = "123"; // 局部变量
System.out.printf("my name is",name);
}
}
封装
保护类中的成员变量不被轻易改变,成员变量设置为私有
public class DemoScanner {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.getName());
s.setName("yl");
System.out.println(s.getName());
}
}
class Student{
private String name = "hzj"; // 成员变量
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
API
Application programming interface 应用程序编程接口
String
string 在 java.lang 核心包下面,核心包下面的内容不需要import 导入
通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内存相同,但是地址值不同
public class DemoScanner {
public static void main(String[] args) {
// 创建一个空白的字符串对象
String str = new String();
System.out.println(str);
// 创建字符串
char[] clist1 = new char[]{'h','e'};
String str2 = new String(clist1);
System.out.println(str2);
}
}
内存详情
StringBuilder
StringBuilder 是一个可变的字符串类,我们可以把它看成一个容器
作用 提高字符串操作效率
package hzj;
public class DemoScanner {
public static void main(String[] args) {
// 获取1970年 1月1日0时0分到现在的时间
long start = System.currentTimeMillis();
String str = "";
for (int i =0;i<50000;i++){
str+=i;
}
long end = System.currentTimeMillis();
long times = end-start;
System.out.println(times); // 982
// 获取1970年 1月1日0时0分到现在的时间
start = System.currentTimeMillis();
str = "";
for (int i =0;i<50000;i++){
str+=i;
}
end = System.currentTimeMillis();
times = end-start;
System.out.println(times); // 508
}
}
集合和数组特点的对比
- 集合类的特点,提供了一种存储空间可变的存储模型,存储的数据容量可以发生改变
- 集合和数组的区别,共同点 都是存储数据的容器 不同点 数组的容量是固定的,集合的容量是可变的
集合 ArraryList
package hzj;
import java.util.ArrayList;
public class DemoScanner {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("abc");
list.add(123);
list.add(true);
// 规定集合类型
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(1);
list2.add(1);
list2.add(1);
list2.add(1);
list2.add(1);
System.out.println(list);
System.out.println(list2);
}
}