本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。
01 什么是对象?
类:类是对象的模板,或者对象的设计图,每new
一次类,可以获得一个新对象。
对象:对象是一种特殊的数据结构,也可以理解为一张表。万物皆对象,谁的数据谁存储。
//类
public class Star{
String name; // 属性or变量
int age;
double height;
double weight;
}
public static void main(String[] args){
Star s = new Star; //对象
s.name = "杨幂";
s.age = 18;
s.height = 1.8;
s.weight = 95;
}
02 案例:面向对象
package.com.itheima.object;
public class Student{
String name;
int cScore;
int mScore;
//封装:将数据和对数据的处理放到同一个类当中
public void printAllScore(){
System.out.println(name + "的总成绩是" +
(cScore + Score));
}
public void printAverageScore(){
System.out.println(name + "的平均成绩是" +
(cScore + Score) / 2);
}
}
package.com.itheima.object;
public class Test{
public static void main(String[] args){
Student s1 = new Student;
s1.name = "波妞";
s1.cScore = 100;
s1.mScore = 100;
System.out.println(s1.name + "的总成绩是" +
(s1.cScore + s1.Score));
System.out.println(s1.name + "的平均成绩是" +
(s1.cScore + s1.Score) / 2);
}
//s1.printAllScore();
//s1.printAverageScore();
}
类的基本语法,包括构造器、this
、封装、Javabean
、static
。
03 构造器
package.com.itheima.object;
public class Student{
public Student(String name, int age, char sex){
this.name = name;
this.age = age;
this.sex =sex;
}
}
04 This 关键字
this
是一个变量,可以用在方法中,用来拿到当前对象,解决对象的成员变量与局部变量名称一样时,导致访问冲突问题的。
package.com.itheima.object;
public class Student{
public void print(){
System.out.println(this.name);
}
}
05 封装
面向对象的三大特征:封装、继承、多态
Student.java
学生类
package.com.itheima.object;
public class Student{
private String name;
private double chinese;
private double math;
private int age;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
注:目前企业要求成员变量必须全部为私有制。
StudentOperator.java
学生操作类
package.com.itheima.object;
public class StudentOperator{
private Student s; //记住学生对象 ⭐
public StudentOperator(Student s){ //学生对象传递 ⭐
this.s = s;
}
public void printAllScore(){
System.out.println(s.name + "的总成绩是" + (s.cScore + s.Score));
}
public void printAverageScore(){
System.out.println(s.name + "的平均成绩是" + (s.cScore + s.Score) / 2);
}
}
Test.java
测试类
package.com.itheima.object;
public class Test{
public static void main(String[] args){
//数据存取
Student s1 = new Student("波妞", 100, 100, 8);
//数据操作
StudentOperator operator = new StudentOperator(s1);
operator.printAllScore();
operator.printAverageScore();
}
}
什么是实体类?
实体类是一种特殊类,需要满足类中的成员变量全部私有,并提供public
修饰的getter/setter
方法,另外,类中需要提供一个无参构造器,有参构造器可选。
实体类的对象只负责数据存取,而对数据的业务处理交给其他类的对象来完成,以实现数据和数据业务处理相分离。
06 Static 关键字
static
意为静态,可以修饰成员变量、成员方法。
成员变量按照有无static
修饰,分为静态变量(类变量)和实例变量(对象变量)两种。
静态变量(类变量):属于类,始终为一块区域
实例变量(对象变量):属于每个对象
注:如果某个数据只需要一份,且希望能被共享(访问、修改),则该数据可以定义成静态变量。
成员变量按照有无static
修饰,分为静态方法和实例方法。
静态方法:属于类
实例方法:属于对象
什么是工具类?
工具类中的方法都是静态方法,实现一个个功能,可以提高代码复用性,调用方便,开发效率高。
注:工具类没有创建对象的可能性,所以建议私有化构造器。
static
注意事项:
- 静态方法中可以直接访问静态成员,不可以直接访问实例成员。
- 实例方法中既可以直接访问静态成员,也可以直接访问实例成员。
- 实例方法中可以出现
this
关键字,静态方法中不可以出现this
关键字的。
package com.itheima.object;
public class Test{
// 静态变量
public static int count = 100;
//静态方法
public static void helloWorld(){
System.out.println("Hello, world!");
}
//实例变量
private String name;
//实例方法
private void helloJava(){
System.out.println("Hello, java!");
}
public static void main(String[] args){
System.out.println(count);
helloWorld();
}
public void gogogogo(){
//调用静态成员
System.out.println(count);
helloWorld();
//调用实例成员
System.out.println(name);
helloJava();
}
}
07 案例:电影信息展示
Movie.java
package movie;
public class Movie {
private int id;
private String name;
private double price;
private String actor;
public Movie() {
}
public Movie(int id, String name, double price, String actor) {
this.id = id;
this.name = name;
this.price = price;
this.actor = actor;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
MovieOperator.java
package movie;
import java.util.Scanner;
public class MovieOperator {
//构造函数上大分
private Movie[] movies;
public MovieOperator(Movie[] movies){
this.movies = movies;
}
public void printAllMovies(){
for(int i=0; i<movies.length; ++i){
Movie m = movies[i];
System.out.println(m.getId() + "\t"
+ m.getName() + "\t"
+ m.getPrice() + "\t"
+ m.getActor());
}
}
public void printSelectMovieById(){
System.out.println("请输入您要查找的电影id:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0; i<movies.length; ++i){
Movie m = movies[i];
if(m.getId() == n){
System.out.println(m.getId() + "\t"
+ m.getName() + "\t"
+ m.getPrice() + "\t"
+ m.getActor());
}
}
}
}
Test.java
package movie;
public class Test {
public static void main(String[] args) {
Movie[] movies = new Movie[6]; //万物皆类型
movies[0] = new Movie(1,"星际穿越", 9.6, "孙二");
movies[1] = new Movie(2,"蝙蝠侠", 8.7, "张三");
movies[2] = new Movie(3,"间谍", 8.5, "李四");
movies[3] = new Movie(4,"天外来客", 9.2, "王五");
movies[4] = new Movie(5,"AI", 9.0, "赵六");
movies[5] = new Movie(6,"月球引力", 8.2, "钱七");
MovieOperator operator = new MovieOperator(movies);
operator.printAllMovies();
operator.printSelectMovieById();
}
}
报错:
解决: