目录
- 1、类和对象
- 1.1 类的介绍
- 1.2 类和对象的关系
- 1.3 类的组成
- 2、对象内存图
- 2.1 单个对象内存图
- 2.2 两个对象内存图
- 2.3 两个引用指向相同内存图
- 3、成员变量和局部变量
- 3.1 成员变量和局部变量的区别
- 4、this关键字
- 4.1 this可以解决的问题
- 4.2 this介绍
- 4.3 this内存图
- 4.4 this总结
- 5、构造方法
- 5.1 构造方法概述
- 5.2 构造方法的作用
- 5.3 构造方法的注意事项
- 5. 4 构造方法的执行流程
- 6、封装
- 6.1 面向对象三大特征
- 6.2 封装的设计规范
- 6.3 权限修饰符
- 7、标准JavaBean
- 8、综合案例
1、类和对象
1.1 类的介绍
1.2 类和对象的关系
1.3 类的组成
2、对象内存图
2.1 单个对象内存图
注意点:一段代码要开始运行时,先将源文件编译成字节码文件,然后主方法对应的字节码文件进入方法区,接着主方法进入栈内存,当需要创建新的对象时,也就是new对象时,就会在堆内存中开辟此对象对应的空间。
面试时,需要能回答上这三个内存区域的用法。
2.2 两个对象内存图
2.3 两个引用指向相同内存图
3、成员变量和局部变量
3.1 成员变量和局部变量的区别
4、this关键字
4.1 this可以解决的问题
局部变量和成员变量重名了,但是还要用成员变量,那么就可以使用this关键字了。
this的作用:可以调用本类的成员(变量和方法)。
4.2 this介绍
也就是说:谁来调用我,我就代表谁。
4.3 this内存图
4.4 this总结
5、构造方法
5.1 构造方法概述
5.2 构造方法的作用
package com.itheima.oop;
public class Student {
String name;
int age;
public Student(){
System.out.println("我是无参构造方法!!!");
}
public Student(String name, int age){
this.name = name;
this.age = age;
System.out.println("我是有参构造方法!!!");
}
}
package com.itheima.test;
import com.itheima.oop.Student;
public class StudentTest {
public static void main(String[] args) {
Student s1 = new Student();//不传参数,则创建时调用无参构造
Student s2 = new Student("马四", 16);//传参数,则创建时调用有参构造
}
}
输出:
我是无参构造方法!!!
我是有参构造方法!!!
5.3 构造方法的注意事项
5. 4 构造方法的执行流程
6、封装
6.1 面向对象三大特征
继承和多态放后面面向对象高级课程学习。今天只学习封装。
-
案例一:
-
案例二:
6.2 封装的设计规范
注:隐藏和暴露都是针对要使用对象的使用者而言。那如何隐藏,如何暴露呢?看下面权限修饰符知识。
6.3 权限修饰符
使用set方法和get方法,合理隐藏、合理暴露:
7、标准JavaBean
JavaBean是指:实体类,即封装数据的类。
8、综合案例
代码:
- Main.java
package com.itheima.movieSystem.domain;
public class Main {
public static void main(String[] args) {
System.out.println("==============电影信息系统==============");
//1、登录验证
Login login = new Login();
login.login();
//2、菜单选择
SelectMovieInfoHandler selectMovieInfoHandler = new SelectMovieInfoHandler();
selectMovieInfoHandler.menu();
}
}
- SelectMovieInfoHandler.java
package com.itheima.movieSystem.domain;
import com.itheima.movieSystem.vo.Movie;
import java.util.Scanner;
public class SelectMovieInfoHandler {
public void menu() {
//加载数据库
Movie[] data = getData();
loop:
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("1.查询全部电影信息");
System.out.println("2.根据id查询电影信息");
System.out.println("3.退出");
int choose = sc.nextInt();
switch (choose) {
case 1:
queryAllMovie(data);
break ;
case 2:
queryMovieById(data);
break ;
case 3:
System.out.println("欢迎下次观看!");
break loop;
default:
System.out.println("没有此选项!");
break ;
}
}
}
public Movie[] queryAllMovie(Movie[] data){
System.out.println("全部电影如下:");
for (Movie datum : data) {
System.out.println(datum.toString());
}
return data;
}
public Movie queryMovieById(Movie[] data){
System.out.println("请输入要查询电影的id:");
Scanner sc = new Scanner(System.in);
int id = sc.nextInt();
for (Movie datum : data) {
if (datum.getId() == id) {
System.out.println(datum.toString());
return datum;
}
}
return null;
}
public Movie[] getData(){
Movie[] arr = new Movie[2];
Movie movie1 = new Movie();
movie1.setId(1);
movie1.setName("大力王");
movie1.setScore(91);
arr[0] = movie1;
Movie movie2 = new Movie();
movie2.setId(2);
movie2.setName("魔法大师");
movie2.setScore(95);
arr[1] = movie2;
return arr;
}
}
- Login.java
package com.itheima.movieSystem.domain;
import java.util.Random;
import java.util.Scanner;
public class Login {
//获取验证码
public String getVerificationCode() {
//初始化验证码词典库
char[] arr = getContents();
//生成随机验证码
Random r = new Random();
// char[] verificationCodeArr = new char[5];
StringBuilder verificationCodeArr = new StringBuilder();
for (int i = 0; i < 5; i++) {
verificationCodeArr.append(arr[r.nextInt(arr.length)]);
}
return verificationCodeArr.toString();
}
private char[] getContents() {
//初始化验证码词典库
char[] arr = new char[62];
for (int i = 0; i < arr.length; i++) {
if (i < 26){
arr[i] = (char)('a' + i);
}else if (i <52){
arr[i] = (char)('A' + i - 26);
}else {
arr[i] = (char)('0' + i - 52);
}
// System.out.print(arr[i] + " ");
}
return arr;
}
public void login(){
while (true){
Login login = new Login();
String verificationCode = login.getVerificationCode();
System.out.println("系统生成的验证码:" + verificationCode);
System.out.println("请输入验证码:");
Scanner sc = new Scanner(System.in);
String printVerificationCode = sc.next();
if (check(verificationCode, printVerificationCode)){
System.out.println("登录成功,欢迎来到电影信息系统!");
break;
}else {
System.out.println("输入的验证码错误,请重新输入!");
}
}
}
public boolean check(String verificationCode, String printVerificationCode){
return verificationCode.equals(printVerificationCode);
}
}
- Movie.java
package com.itheima.movieSystem.vo;
public class Movie {
private String name;//电影名称
private double score;//电影评分
private int id;//电影id
public Movie() {
}
public Movie(String name, double score, int id) {
this.name = name;
this.score = score;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "电影:{" +
"名称='" + name + '\'' +
", 得分=" + score +
'}';
}
}