0
点赞
收藏
分享

微信扫一扫

什么是类和对象?看完这篇就知道

seuleyang 2022-05-02 阅读 52

类和对象

文章目录


前言

Java是一门面向对象的编程技术,在Java中我们常说一切皆对象,那么接下来我们就来看看什么是类和对象


一、什么是类和对象

在这里插入图片描述

在生活中,像张三,李四,王五,这样真真正正存在人的实体,我们称这些实体为对象。

我们在描述这些对象的时候,发现这些对象具有一些共同的特征,这些特征分为两种:
1.具有相同的属性:这些对象都有鼻子,眼睛,嘴巴等等
2.具备相同的行为:这些对象都要吃喝拉撒睡
因此我们把具有相同属性的行为和属性的一类对象抽象为类,使用类来描述这类对象的特征

创建类的语法
1.类的命名使用有意义的大驼峰单词命名法
从第一个单词首字母就开始大写,多个单词都是首字母大写
(class Person)(class ChinaPerson)

2.类中定义的成员变量都有默认值,在定义的时候可以不赋值,所有引用数据类型的默认值都为null(String name;),整形变量的默认值为0(int age;)

class 类名称{
	//field(实例变量,成员变量)
	//行为(实例方法,成员方法)
}

定义一个人类的类

class Person{
	String name;
	int age;
	String sex;
	
	void eat(){}
	void sleep(){}
	void print(){
	System.out.println("姓名为:" + name + ",年龄为:" + age + ",性别为:" + sex)
	}
}

类相当于一个蓝图,一个范本,抽象的概念,有类之后我们就可以根据这个类产生一个具体的对象
产生一个类的语法

类名称  引用名称 = new 类名();

产生一个人的对象

Person per = new Person();
class Test{
	Persong per1 = new Person();
	per1.name = "张三";
	per1.age = 18;
	per1.sex = "男";
	per1.print();
	Person per2 = new Person();
	per2.print();
}

//结果
//姓名为:张三,年龄为:18,性别为:男
//姓名为:null,年龄为:0,性别为:null

二、封装

在我们写代码的时候经常会涉及两种角色: 类的实现者和类的调用者.
封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了.
这样就降低了类使用者的学习和使用成本, 从而降低了复杂程度。
主要作用:保护性和易用性

1.private实现封装

private实现属性和方法的封装只是封装的一种

1.1权限修饰符

在Java中,所谓的权限修饰符,指的是,你修饰的属性,方法,类到底可见的范围有多大,一共有四大访问修饰符,可见范围由小到大依次为:
private < default(不需要写这个关键字) < protected < public,这篇我们主要看public和private

1.1.1public

public是公共的意思,被public修饰的东西,在当前程序(项目)中都是可见的,都是可以使用的

class Person {
 public String name = "张三";
 public int age = 18;
}
class Test {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println("我叫" + person.name + ", 今年" + person.age + "岁");
   }
}
// 执行结果
我叫张三, 今年18

1.1.2private

private是私有的的意思,被private修饰的方法和属性,只有在当前类的内部是可见的,出了类的{},就对外完全隐藏了,外部不知道有其存在。

class Person { 
 private String name = "张三"; 
 private int age = 18; 
 
 public void show() { 
 System.out.println("我叫" + name + ", 今年" + age + "岁"); 
 } 
} 

class Test { 
 public static void main(String[] args) { 
 Person person = new Person(); 
 person.age = 20; 
 person.show(); 
 } 
} 
// 编译出错
Test.java:13: 错误: age可以在Person中访问private 
 person.age = 20; 
 ^ 
1 个错误

阿里编码规范:
Java类中所有的成员变量一律使用private封装,并且根据属性的实际情况对外提供getter和setter方法。

2.getter和setter方法

当我们使用 private 来修饰字段的时候, 就无法直接使用这个字段了,此时如果需要获取或者修改这个 private 属性, 就需要使用 getter / setter 方法.

代码如下(示例):

class Person { 
 private String name;//实例成员变量
 private int age; 
 
 public void setName(String name){ 
 //name = name;//不能这样写
 this.name = name;//this引用,表示调用该方法的对象
 } 
 public String getName(){ 
 return name; 
 } 
 
 public void show(){ 
 System.out.println("name: "+name+" age: "+age); 
 } 
} 
public static void main(String[] args) { 
 Person person = new Person(); 
 person.setName("caocao"); 
 String name = person.getName(); 
 System.out.println(name); 
 person.show(); 
} 
// 运行结果
caocao 
name: caocao age: 0 

注意事项
1.getName 即为 getter 方法, 表示获取这个成员的值.
2.setName 即为 setter 方法, 表示设置这个成员的值
3.当set方法的形参名字和类中的成员属性的名字一样的时候,如果不使用this, 相当于自赋值. this 表示当前实例
的引用.
4.不是所有的字段都一定要提供 setter / getter 方法, 而是要根据实际情况决定提供哪种方法.
5.在 IDEA 中可以使用 alt + insert (或者 alt + F12) 快速生成 setter / getter 方法.


三、构造方法

3.1.基础语法

构造方法是类中非常特殊的一种方法,使用new关键字实例化对象的时候实际上就是调用的是该类的构造方法,构造方法的作用就是产生对象

public class Test{
	public static void main(String[] args){
		Person per = new Person();
	}
}


class Person{
	private String name;
	private int age;

	public Person{
	System.out.println("Person的构造方法");
	}
}

//结果
//Person的输出方法

构造方法是可以重载的,这里的重载是参数的个数不同,参数的类型在变量定义的时候就已经固定了,只是初始化的变量的个数不同

class Person { 
 
 private String name;//实例成员变量
 private int age; 
 private String sex; 
 //默认构造函数 构造对象 
 public Person() { 
 this.name = "caocao"; 
 this.age = 10; 
 this.sex = "男"; 
 } 
 //带有3个参数的构造函数
 public Person(String name,int age,String sex) { 
 this.name = name; 
 this.age = age; 
 this.sex = sex; 
} 
 public void show(){ 
 System.out.println("name: "+name+" age: "+age+" sex: "+sex); 
 } 
 
} 
public class Main{ 
 public static void main(String[] args) { 
 Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
 p1.show(); 
 Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
 p2.show(); 
 } 
} 
// 执行结果
name: caocao age: 10 sex:name: zhangfei age: 80 sex:

3.2.this关键字

this表示当前对象的引用,有对象。

1.调用当前对象的成员方法

在这里插入图片描述
使用this关键字后
在这里插入图片描述

2.this调用类中方法

2.1this调用类中的成员方法

在这里插入图片描述

2.2构造方法之间的相互转换

在这里插入图片描述

2.3this表示当前对象的引用

四、代码块

代码块:指的就是用{}括起来的一段代码
根据定义的代码块位置以及关键字的的不同分为以下四种代码块

4.1静态代码块

public class CodeTest{
	public static void main (String[] args){
		{
			//普通代码块
			int a = 10;
		}
		int a = 20;
		System.our.println(a);
	}
}

//结果
//20

4.2成员代码块(构造块)

在这里插入图片描述

4.3静态代码块

在这里插入图片描述

在这里插入图片描述

五、匿名对象

//Animal的匿名对象
System.out.println(new Animal)

六、 toString方法

class Animal {
	private name;
	private age;
	public String toString(){
		String ret = "name = " + this.name + ",age = " + this.age;
		return ret;
	}
}
举报

相关推荐

0 条评论