类与对象的关系
举例子类好比造车的图纸
对象为一台真实的汽车。类是抽象的概念,对象为具体的概念可在现实生活中一一对应。创建对象就是将类实现化的过程
Car car1 = new Car();
Car car2 = new Car();
注 在这里根据同一张图纸造出两辆车造车图纸为同一张,则类为同一类。
对象
对象的本质是一种特殊的数据结构。
class
class 是类对象的设计图,对象的模板
例子
public class student {
String name;
double chinese;
double math;
public void printTotalScore() {
System.out.println(name + "的总成绩为" +(chinese + math));
}
public void printAverageScore() {
System.out.println(name + "的平均成绩为" +(chinese + math)/2.0);
}
}
public class Test {
public static void main(String[] args) {
//目标;面向对象编程快速入门。
//1,创建一个学生对象,封装波妞的数据
student s1 =new student();
s1.name = " 波妞";
s1.chinese = 100;
s1.math =100;
s1.printTotalScore();
s1.printAverageScore();
//2,在创建一个学生对象,封装波仔的数据
student s2 = new student();
s2.name = "波仔";
s2.math =100;
s2.chinese = 59;
s2.printTotalScore();
s2.printAverageScore();
}
}
对象在计算机中的执行原理
对于 student s1 = new student ();的理解
1每次在new student 时就是在堆内存中开辟一段空间代表学生对象
2 这块内存区域可理解为一张学生表,每new一块学生表都会在堆内存中开辟一大段空间
3 s1变量中记住的是s1学生变量的地址
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/af7d213f42b1487492c39e895592c6db.pn
注 如何判断引用类型变量
一个变量中存储这变量的地址那么就成为引用类型变量
eg student s1= new student ();
s1中储存这s1对象的地址,则s1为引用类型变量
类与对象的注意事项
public class Test2 {
public static void main(String[] args) {
//掌握类与对象的注意事事项
// 1类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student.Car..
// 2类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
//3 成员变量本身存在默认值,同学们在定义成员变量时一般来说不需要赋初始值(没有意义)。
student s = new student();
System.out.println(s);
//4一个代码文件中,可以写多个class类,但只能一个用public修饰,
// 且public修饰的类名必须成为代码文件名。
// 5对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
student s1 = new student();
s1.name = "张三";
//student s2 = new student();
//s2.name = "李四";
student s2 =s1;
s2.name ="李四";
//打出来为李四
System.out.println(s1.name);
此为第四条注意事项
this
this作用的是对象内部,可以在对象方法,构造方法中使用
this就是一个变量,可以用在方法中,来拿到当前对象使用
this的应用场景:this主要解决的为变量名称冲突问题
this的作用是代表了当前对象的地址,可以访问当前对象的成员变量跟成员方法
this可以用在有参构造器中
public class Test {
public static void main(String[] args) {
//掌握this的应用场景
Student s1 =new Student();
System.out.println(s1);
s1.printThis();
System.out.println("___________");
Student s2 =new Student();
System.out.println(s2);
s2.printThis();
Student s3 = new Student();
s3.score= 325;
s3.printPass(250);
}
}
//掌握this的应用场景
public class Student {
double score;
public void printThis()
{
System.out.println(this);
}
public void printPass(double score)
{
if(this.score>score)
{
System.out.println("恭喜您,您成功的考入哈弗大学~~");
}
else {
System.out.println("落选了~~~");
}
}
}
构造器
构造器是一种特殊的方法,无返回值类型,方法的名字与所在类名相同
初始化一个类的对象,并返回这个对象的地址
注:一般使用构造器时创建一个无参数与有参数的方便使用。
import comithema.object.Teacher;
public class Test {
public static void main(String[] args) {
//认识构造器,并对构造器的特点,应用场景,注意事项
Student s = new Student("波仔", 99);
Student s1 = new Student();
s1.name = "波仔";
s1.score = 100;
Student s2 = new Student("小黑",59);
System.out.println(s2.name);
System.out.println(s2.score);
Teacher t = new Teacher();
}
}
public class Teacher {
}
封装
面向对象有三大特征:封装,继承,多态。
封装就是用类设计对象处理某一个事物的数据时,应该把处理的数据,以及处理这些数据的方法,设计到一个对象中去。
封装的设计规范为合理隐藏,合理暴露。隐藏用private (只能在当前类中访问在外界中不可访问) 暴露用public
举例:对于输入成绩既要保证成绩可让人输入也要保证数据合法不随意让人输入(某些人输入负数)
在下面代码中利用getscoer与setscore两种方法实现对数据的合法输入其中保证数据的范围利用分支实现
public class Test {
public static void main(String[] args) {
//掌握封装的设计规范:合理隐藏,合理暴露
Student s1 = new Student();
s1.setScore(99);
System.out.println(s1.getScore());
}
}
public class Student {
private double score;
public void setScore(double score){
if(score>=0&&score<=100){
this.score =score;
}
else
{
System.out.println("数据非法");
}
}
public double getScore()
{
return score;
}
public void printPass()
{
System.out.println(score>=60 ? "成绩及格":"成绩不及格");
}
}
javabean(实体类)
实体包是用来存取数据。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b2e57bd45281418eb76db0922a81af8d.pn
例子:将波妞的数据与数据功能分开
public class Text {
public static void main(String[] args) {
//掌握实体类的书写要求,特点,应用场景
Student s1 = new Student();
s1.setName("波妞");
s1.setScore(99);
System.out.println(s1.getScore());
System.out.println(s1.getName());
StudentOperator operator = new StudentOperator(s1);
operator.printPass();
}
}
public class Student {
//1,必须私有成员变量,并为其每个成员变量都提供get set方法
private String name;
private double score;
//必须为类提供一个公开的无参数构造器
public Student() {
}
public Student(String name, double score) {
this.name = name;
this.score = score;
}
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 class StudentOperator {
private Student student;
public StudentOperator(Student student)
{
this.student =student;
}
public void printPass()
{
if(student.getScore()>=60)
{
System.out.println(student.getName() +"学生成绩及格");
}
else {
System.out.println(student.getName()+"学生成绩不及格");
}
}
}
注:快速使用get set的方法
若想钩住全选则左手按住shift右手选中内容
2,有参数构造器的快捷键
与上述方法同理选多个
无参数构造器
成员变量与局部变量的区别
public class Text {//局部变量
public static void main(String[] args) {
//类中的位置不同,成员变量(类中,方法外),局部变量(常见于方法中)
//初始话不同成员变量(有默认值,不需要初始化值),局部变量(没有默认值,使用前必须完成赋值)
//eg int b=20(必须给b进行赋值)
//3.内存位置不同:成员变量(存在于堆内存),局部变量(栈内存)
//4,作用域不同:成员变量(整个对象),局部变量(在所归属的大国括号中)
String name ="黑马";//意思从第15到最后的大括号位置,黑马才有作用
//5,生命周期不同:成员变量(与对象同共生死),局部变量(方法调用而生,方法结束而死亡)
}
}
public class Student {
//成员变量(对象的属性:Field)
String name;
double score;
public void aaa()
{
double score=98;
System.out.println(score);//访问98
System.out.println(this.score);
/**访问的为当前成员变量的score即
最上面的double score
*/
}
}