2021年7月23日
讲师:王博
第一阶段第二周
今日内容
·类和对象
·类和对象的内存分析图
·构造方法
1.面向对象的初始
编程语言中,有两种开发的思想:
面向对象,面向对象
C语言 面向过程
c++
Java 纯面向对象的
- 生活中的角度去理解面向对象和面向过程
买电脑:
去电脑商场去逛一圈或者在电商网站上浏览一下
比对
看配置,看售后,看价格
面向过程的思想:亲力亲为
我有一个朋友,懂电脑,而且手里面还有资源,我委托他,全权负责买电脑这个事就可以。
面向对象:找一个对象帮你干活
住:
首先得有房子
面向过程:1.选快地2挖地基3打灰4自己盖5自己住
面向对象:找一个施工队,你只需要交钱即可
面向对象:找专门的对象,做专门的事情
Arrays.toString()
面向过程:亲力亲为
- 面向对象的两个重要的概念
类:是对一切相似事物的统称,是一个泛泛(广泛)的概念。可以描述相似事物的特称和行为
特征:就是一类事物的属性,比如 人的年龄,人的性别,人的身高,人的体重
Java中使用变量(属性)来表示特征
Int age=23;
行为:吃饭,喝水,睡觉,跑步
Java中使用行为来表示方法
对象:是一个具体的实体,是真实存在的实体
类 |
对象 |
人 |
咱们班级里的小明 |
狗 |
咱们班级小明家里的二哈 |
手机 |
咱们班小明的小米手机 |
电脑 |
我的电脑 |
类和对象的关系:有类才有对象,对象是类的一个具体的实现
人类:
特征(在java中使用变量或属性表示特征):身高 年龄 体重 性别
行为(在java中使用方法来表示行为):吃饭,喝水,睡觉
- 声明一个类的语法格式
语法格式:
Public class 类名{
对于当前类属性的描述;
对于当前类行为的描述;
}
- 创建类对象
为什么要创建对象
让对象做一些专门的事情
使用关键字 new
Java创建对象的语法格式
类名 对象的名字 = new 类名();
只能在mian主函数中new
package com.liujinghe.class1;
public class Demo2 {
public static void main(String[] args) {
Dog dogdan = new Dog();
dogdan.name = "旺财";
dogdan.color = "粉色";
dogdan.weight = 32.4;
dogdan.sex='公';
System.out.println(dogdan.name+":"+dogdan.color+";"+dogdan.weight+";"+dogdan.sex);
dogdan.fight();
dogdan.lookHome();
System.out.println(dogdan);//打印的是内存地址
}
}
6.创建类和对象都在同一个文件中
package com.liujinghe.class2;
class Mouse{
//老鼠属性:智慧wisdom 力量power 敏捷agility
//老鼠方法:护主protector 破甲armorBreaking
int wisdom;
int power;
int agility;
public void protector(){
System.out.println("护主技能启动");
}
public void armorBreaking(){
System.out.println("破甲成功");
}
@Override
public String toString() {
return "Mouse{" +
"wisdom=" + wisdom +
", power=" + power +
", agility=" + agility +
'}';
}
}
public class Demo1 {
public static void main(String[] args) {
Mouse mouse = new Mouse();
mouse.agility=15;
mouse.power=13;
mouse.wisdom=10;
System.out.println(mouse);
mouse.armorBreaking();
mouse.protector();
}
}
7.类对象内存分析图
Jvm java虚拟机 需要占用电脑的内存
分区:栈区 堆区 方法区 回收区
8.构造方法
用来初始化当前类对象的
就是对当前成员属性进行赋值。
语法格式:
Public 类名(){
方法体
}
8.1无参数的构造方法
语法格式:
Public 类名(){
方法体;
}
注:构造方法是在对象创建的时候就执行
8.2有参数的构造方法
语法格式
Public 类名(参数){
方法体
}
package com.liujinghe.class3;
public class Person {
String name;
int age;
//有参数的构造方法
//通过实例化对象传入真实的值
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name) {
this.name = name;
}
}
8.3无参数的构造方法和有参数构造方法的注意事项
- 无参数的构造方法是默认的,写了有参数构造方法以后,默认无惨构造方法就不存在了。
- 构造方法必须是类名,其他的成员方法不能以类名来命名
- 构造方法没有返回值,并且不需要使用关键字void进行修饰
- 构造方法可以有多个,但是构造方法的参数是有数据类型的约束的
- 无论什么时候,都要写一个无参构造方法,以备用
package com.liujinghe.class4;
class Horse{
String name;
String color;
int age;
public Horse(){
//无参数的构造
}
public Horse(String name, String color, int age) {
//有参数构造
this.name = name;
this.color = color;
this.age = age;
}
}
public class Demo2 {
public static void main(String[] args) {
Horse horse = new Horse("汗血宝马","棕色",3);
System.out.println(horse.name+","+horse.color+","+horse.age);
}
}
9.构造代码块(了解)
实例化对象的时候,先调用了构造方法
构造方法执行的话,构造代码块就一定执行。
也是初始化类对象的
写的位置:成员变量之后,构造方法之前
语法格式:
{
方法体
}
package com.liujinghe.class4;
class Fish{
String kind;//种类
{
System.out.println("这是构造代码块");
}
public Fish(){
System.out.println("无惨构造方法");
}
public Fish(String kind){
this.kind = kind;
System.out.println("有参构造方法");
}
}
public class Demo3 {
public static void main(String[] args) {
Fish fish = new Fish();
Fish fish1 = new Fish("金鱼");
}
}
10.局部变量
package com.liujinghe.class5;
public class Person {
//成员变量 只要你在这个类中,就可以进行使用
String name;
int age;
public void eat(){
name = "狗蛋";
int age1 =0;//局部变量,局部变量必须赋值
System.out.println(age1);
System.out.println(name);//可以使用成员变量
}
}
10.1成员变量和局部变量的区别
区别 |
成员变量 |
局部变量 |
定义的位置 |
定义在类的大括号的后面 |
定义在方法体内 |
作用 |
描述当前类的属性 |
保存局部数据 |
初始值 |
是对应的当前初始化的“0”值 |
必须初始化,没有赋值就报错 |
所处的内存空间 |
堆里面 |
栈里面 |
作用域 |
类内都可以使用 |
声明的方法体中 |
package com.liujinghe.class5;
public class Person {
//成员变量 只要你在这个类中,就可以进行使用
String name;
int age;
public void eat(){
name = "狗蛋";
int age1 =0;//局部变量,局部变量必须赋值
System.out.println(age1);
System.out.println(name);//可以使用成员变量
}
}
重点:声明类,创建类对象,构造方法
作业:写十二生肖
1封装 继承 多态