类
概念:Java中的类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。
语法:
[访问限定修饰符] class 类名{}
public class Demo{}
private class Demo{}
protected class Demo{}
class Demo{}
访问限定修饰符:
修饰符 | 作用范围 |
---|---|
public | 所有类中均可用 |
protected | 仅限本包中具有继承关系的子类可用 |
private | 仅限本类中可用 |
default | 默认修饰符本包中均可用 |
类名:统一采用大驼峰原则 eg:Test,Demo,Animal
面向对象
oop:Object Oriented Programming(面向对象),Java中编程是面向对象的,由于面向过程编程无法解决一些重用,维护,扩展等问题,而且逻辑复杂,代码不易理解,于是人们让计算机直接模拟现实世界的环境,从人类解题的思路去设计应用程序,于是面向对象编程出现了。
对象:一切客观存在的事物即为对象,对象具有自己的特征和行为,特征即为属性,代表对象具有什么,行为即为方法,代表对象能有什么功能。
分析对象的属性:
手机品牌 | apple |
---|---|
颜色 | 黑色 |
价格 | 8748 |
型号 | 12pro |
运行内存 | 8GB |
机身存储 | 256GB |
分析对象方法:
打电话 | 拨号->发射 |
---|---|
拍照 | 美颜,修图 |
上网 | 看视频,玩游戏,聊天,听音乐 |
分析现实和程序:
现实中对象:来自于模板,通过模板创造出来的实体,即是现实中的对象
程序中的对象:来自于模板(“类”),通过类创造出来的实体,即是程序中的对象
类和对象的关系:
类:定义了对象具有的特征和行为,类是对象的模板
对象:拥有多个特征和行为的实体,对象是类的实列
oop语言有三大特征:继承,封装,多态。本文只介绍封装
封装
I. 概念:尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限。
II. private的访问修饰符,修饰属性,达到本类可见的效果。
III. get/set方法是外界访问私有属性的唯一通道,方法内部可对数据进行过滤。
IV. 提供公共访问方法,以保证数据可以正常录入。
This关键字
this代表“当前实例”,即是模板中的当前对象,模板服务与哪个对象,this就指向哪个对象。
1.this第一种用法:调用本类中的实例属性、实例方法。例如:this.name、this.run() ,
2.this第二种用法:调用本类中的其他构造方法。例如:this()、this(实参)。注意:必须在构造方法的首行。
构造方法: 没有返回值的一个方法,且方法名与类名一致,每一个类都有一个默认的无参构造方法
class Student{
public void Student(){}
System.out.println("不带参数的构造方法执行了")
}
方法重载: 方法名相同,参数列表不同,返回值无关。同上个构造方法举例
public void Student(String name,int age,String sex){
this.name=name;
this.age=age;
this.sex=sex;
System.out.println("带参构造方法执行了")
}
综上所述,写一个完整程序供参考
public class School {
public static void main(String[] args){
Student stu=new Student();//创建对象时执行构造方法
stu.setName("浩然"); //通过stu对象调用Student里的方法
stu.setAge(21);
stu.setSex("男");
stu.getName(); //通过get方法获取私有属性
stu.getAge();
stu.getSex();
stu.eat();
System.out.println("==================================");
stu.run();
System.out.println("==================================");
System.out.println("学生基本信息如下:");
stu.show();
System.out.println(stu);
System.out.println("==================================");
stu.Student();//调用无参构造方法
stu.Student("晓雅",20,"女");//调用有参构造方法
}
}
class Student{
private String name; //将类中的属性封装,外界无法访问,程序安全性提高
private int age;
private String sex;
public Student(){
System.out.println("无参构造方法执行");
}
//构造方法重载
public void Student(String name,int age,String sex){
this.name=name;
this.age=age;
this.sex=sex;
System.out.println("姓名:"+name+" 年龄:"+age+" 性别:"+sex);
}
public void eat(){
System.out.println(name+"现在在吃午饭");
}
public void run(){
System.out.println(name+"下午三点去体育场跑步");
}
public void show(){
System.out.println("姓名:"+name+" 年龄:"+age+" 性别:"+sex);
}
@Override
//String类库中的一个方法,展示本类中的属性
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
//创建set/get方法获取本类中私有属性,外界可调用set/get方法获取到本类中的私有属性
public void setName(String name) {
this.name = name; //调用当前属性
}
public void setAge(int age) {
this.age = age;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getSex() {
return sex;
}
}
运行结果如下
Static关键字
1.静态与实例的区别:
I.实例属性是每个对象各自持有的独立空间(多份),对象单方面修改,不会影响其他对象。
II.静态属性是整个类共同持有的共享空间(一份),任何对象修改,都会影响其他对象。
2. 静态的概念:
I. static可以修饰属性和方法,即为静态属性(类属性)、静态方法(类方法)
II. 静态成员是全类所有对象共享的,全类只有一份,不因创建多个对象而产生多份。
III. 不必创建对象,也可通过类名,直接访问静态成员。
IV. 经验:访问静态属性和方法时,可直接通过“类名.静态属性名”以及“类名.静态方法名”(推荐)
3. 静态的特点:
I. 静态方法允许直接访问静态成员。
II. 静态方法不能直接访问非静态成员。
III. 静态方法中不允许使用this或super关键字。
IV. 静态方法可以继承,不能覆盖,没有多态。
4. 类加载:
I.JVM首次使用某个类时,将该类的.class文件加载到内存中,进行保存。
II.加载时机:
1). 创建对象
2). 创建子类对象
3). 调用静态属性和方法
4). Class.forName(“全限定名”); //主动的加载一个类
5. 静态代码块:
I. 类加载时,触发静态代码块的执行(仅一次)。
II. 执行地位:静态属性初始化之后。
III. 作用:可为静态属性赋值,或必要的初始行为。
6. 总结:
static修饰的成员为静态成员,无需创建对象,可直接通过类名访问。
静态方法不能直接访问非静态成员。
静态方法中不能使用this或super。
静态方法可以继承、不能重写、没有多态。
静态代码块在类加载时被执行,且只执行一次。