🍉内容专栏:【JAVA】
🍉本文脉络:JAVA类和对象
🍉本文作者:Melon_西西
🍉发布时间 :2023.8.11
目录
1.面向对象的初步认知
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面 向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
2.类定义和使用
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干 啥)
在java中定义类时需要用到class关键字。类名注意采用大驼峰(单词首字母均大写)定义
class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类 具有哪些功能,称为类的成员方法。
class PetDog {
public String name;//名字
public String color;//颜色
// 狗的属性
public void barks() {
System.out.println(name + ": 旺旺旺~~~");
}
// 狗的行为
public void wag() {
System.out.println(name + ": 摇尾巴~~~");
}
class student{
public String name;
public int age;
public void eat(){
System.out.println(name+"吃饭");
}
}
public class Text01 {
public static void main(String[] args) {
student student1 =new student();
student1.name="ming";
student1.age=10;
student1.eat();
student student2 =new student();
System.out.println("student1= " +student1.name+student1.age);
}
}
注意:
1.一般一个文件当中只定义一个类
2. main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
3. public修饰的类必须要和文件名相同
4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改
3. 类的实例化
用类类型创建对象的过程,称为类的实例化
1.在java中采用new关键字,配合类名来实例化对象:
2.new 关键字用于创建一个对象的实例.
使用 . 来访问对象中的属性和方法.
3.同一个类可以创建对个实例.
4. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员. 2. 类是一种自定义的类型,可以用来定义变量
4.this引用
我们在声明一个属性对应的setXxx方法时,通过形参给对应的属性赋值。如果形参名和属性名同名了,那么该如何在方法内区分这两个变量呢?
解决方案:使用this。具体来讲,使用this修饰的变量,表示的是属性。没有用this修饰的,表示的是形参。
this代表当前对象的引用,要养成使用this的习惯。如果同名,局部变量优先
1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2. this只能在"成员方法"中使用
3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
4.this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this负责来接收
5. 对象的构造及初始化
5.1局部变量在使用之前一定要进行初始化
成员变量在没有初始化的时候都有一个默认值,int 0 ;flout 0.0f doublie 0.0;引用类型null
如下代码:
class Person{ public String name; public int age; public void show(){ System.out.println("名字="+this.name+"年龄"+this.age); } } public static void main(String[] args) { Person p1=new Person(); p1.show(); }
以上代码的输出结果是: 名字=null年龄0
5.2默认初始化(不建议)
用在任何一次对象初始化都希望对象都这样 命名,后续可以更改
class Animal{
public String name="猫猫";
public int age =9;
}
5.3赋值初始化
class student{
public String name;
public int age;
}
public class Text01 {
public static void main(String[] args) {
student student1 =new student();
student1.name="ming";
student1.age=10;
}
}
5.4构造方法赋值
构造快捷键:alt + insert 或者工鼠标右键->gen.. .. ->constr. . . ..
实例化一个对象时,先为对象分配内存,再调用合适的构造方法
当没有写构造函数时,JAVA会自己提供一个没有参数的构造函数
1. 名字必须与类名相同
2. 没有返回值类型,设置为void也不行
3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
5.构造方法可以有多个,他们之间构成重载关系
this("西红柿" 2);这种写法只能出现在构造方法中,不能自己调用自己,只能出现在当前构造方法的第一行,this代表当前对象的引用(地址)
public static void main(String[] args) {
Teacher t1=new Teacher();
t1.show();
}
class Teacher{
public String name;
public int age;
public Teacher(){
this.age=27;
this.name="TT";
}
public void show(){
System.out.println("名字="+this.name+"年龄"+this.age);
}
}
在new Teacher()时调用构造函数进行赋值,调用构造函数之后再输出 ti.show
5.5 就地初始化
public class Date {
public int year = 1900;
public int month = 1;
public int day = 1;
public Date(){
}
public Date(int year, int month, int day) {
}
public static void main(String[] args) {
Date d1 = new Date(2021,6,9);
Date d2 = new Date();
}
}
6.封装
面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节。
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互
6.1 访问修饰限定符
public:可以理解为一个人的外貌特征,谁都可以看得到
default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了
private:只有自己知道,其他人都不知道
default:什么都不写时的默认权限
访问权限除了可以限定类中成员的可见性,也可以控制类的可见性
6.2 常见的包
1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
2. java.lang.reflect:java 反射编程包;
3. java.net:进行网络编程开发包。
4. java.sql:进行数据库开发的支持包。
5. java.util:是java提供的工具程序包。(集合类等) 非常重要
6. java.io:I/O编程开发包。
6.3 静态成员变量
static修饰的成员变量,称为静态成员变量,不属于某个具体的对象,是所有对象所共享的。
1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
6.3.1 静态代码块
使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。
static {
classRoom = "bit306";
System.out.println("I am static init()!");
}
public Student(){
System.out.println("I am Student init()!");
}
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
}