一、类
类的定义:
类是面向对象编程的核心单元,用于描述一组具有相同属性和行为的对象的抽象模板。
类比:类是“设计图纸”,对象是根据图纸建造的“具体房子”。
作用:通过类可以创建对象(实例化),实现代码复用和数据封装。
例子,创建学生类,里面可以存入成绩,年龄,名字。
public class Student{
string name;
int score;
int age;
}
二、构造器
用于初始化对象,若在创建类时未定义构造器,java会默认提供无参数构造器。(但写了有参构造器就不会默认提供无参构造器,此时需要自己写)
public class Student
{
String name;
int score;
int age;
//1、无参数的构造器,若不写构造器就默认拥有,
//但写了有参数的构造器必须写无参数的构造器,不然不能定义空内容的对象
public Student() {
System.out.println("无参数构造器开始运行"); //创建类的时候调用
}
public Student(String n, int s, int a)
{
//此时有参构造器开始运行
name=n;
score=s;
age=a;
}
}
public class studentdemo {
public static void main(String[] args) {
Student s1 = new Student(); //调用无参构造器
Student s2 = new Student("张三",70,18); //调用有参构造器
s1.name="李四";
s1.age=18;
s1.score=90;
System.out.println(s1.name+" "+s1.age+" "+s1.score);
System.out.println(s2.name+" "+s2.age+" "+s2.score);
}
}
三、this关键字
作用
1、区分成员变量与局部变量:当二者同名时,用this.变量名可以明确指向成员变量
2、调用类中的其他构造器:在构造器中用this(参数)可以调用本类中的其他构造器,但必须放在方法第一行
public class Student {
String name;
public Student() {
this("默认姓名"); // 调用有参构造器
}
public Student(String name) {
//前文用n指代name,但n本身没有意义,用name能使代码更优雅
this.name = name; // this.name指成员变量,name为形参
}
}
四、封装
核心思想:
通过private修饰成员变量,使类中的成员变量只能在本类中被直接调用,外部方法想要调用需要类内设置set/get方法提供访问权限。
public class Student1 {
String name;
private int age;
int scorce;
public void SetAge(int age)
{
if(age>0&&age<100)
{
this.age=age;
}
else
{
System.out.println("您输入的年龄数据非法");
}
}
}
优势:
1、数据安全性:避免非法赋值(如SetAge()可限制年龄范围)
2、代码可维护性:修改内部实现不影响外部调用(当需要改动age的存储逻辑时,只需要修改存储方法SetAge)。
五、实体类
实体类是一种特殊类,要满足以下要求
1、类中的成员变量全部私有,并提供public修饰的getter与setter方法。
2、类中要提供无参构造器与有参构造器。
应用场景:实体类的对象只负责数据存取,实现数据和数据业务处理相分层。
示例
学生类的创建
package JavaBean;
public class Student {
//私有成员变量
private String name;
private int age;
private int chinesescorce;
private int mathscorce;
//无参构造器
public Student(){
}
//有参构造器
public Student(String name, int age, int chinesescorce,int mathscorce)
{
this.name=name;
this.age=age;
this.chinesescorce=chinesescorce;
this.mathscorce=mathscorce;
}
//公开的setter与getter
public String GetName()
{
return name;
}
public void SetName(String name)
{
this.name=name;
}
public int GetAge()
{
return age;
}
public void setAge(int age) {
if(age>0&&age<100)
this.age = age;
else
System.out.println("您的输入年龄不合法");
}
public int getChinesescorce() {
return chinesescorce;
}
public void setChinesescorce(int chinesescorce) {
if(chinesescorce>=0&&chinesescorce<=100)
this.chinesescorce = chinesescorce;
else
{
System.out.println("您的成绩输入不合法");
}
}
public void setMathscorce(int mathscorce)
{
if(mathscorce>=0&&mathscorce<=100)
this.mathscorce=mathscorce;
else
System.out.println("您输入的成绩不合法");
}
public int getmathscorce()
{
return mathscorce;
}
}
方法类
package JavaBean;
//处理学生类的方法
public class Operatorbuild {
private Student s;//记住将要处理的学生变量
public Operatorbuild(Student s)
{
this.s=s;
}
public int averagescore()
{
return (s.getChinesescorce()+s.getmathscorce())/2;
}
public int Totalscore()
{
return s.getChinesescorce()+s.getmathscorce();
}
}
测试
package JavaBean;
public class Text {
public static void main(String[] args)
{
Student s1=new Student();
s1.SetName("小明");
s1.setAge(18);
s1.setChinesescorce(90);
s1.setMathscorce(83);
Operatorbuild operator=new Operatorbuild(s1);
System.out.println("平均成绩为:"+operator.averagescore());
System.out.println("总成绩为: "+operator.Totalscore());
}
}
以上代码就实现的学生数据存储与平均分,总分计算的分开业务处理。