面向对象思维 Java中的类和对象及其应用

一、面向过程与面向对象

面向过程: 从事务执行者的角度思考问题,我该干什么  重点在过程----事务流程

面向对象: 从事务的指挥者角度思考问题,我应该找谁干什么  重点在对象

面向对象的优点:

1.将复杂问题简单化

2.从事务的执行者转化为事物的指挥者

3.更贴近人的思维(懒人思想)

二、类和对象

类是Java中最基本的单位,是一类抽象事物的集合  对抽象事物的描述(模板)

对象: 用类创建出来的具体的事物就是对象

抽象描述类:

类中的属性是指成员变量

类中的行为是指成员方法

//属性 (成员变量 实例变量)
//书写位置: 类中,方法外

//行为 (方法) 和Java中函数的声明一样,只是不写static关键字
//书写位置: 类中 

创建一个类:  关键字 + class + 类名(大驼峰命名) + { }

例如: 创建一个学生类  

        属性:  姓名  年龄  性别

        行为:  吃饭  睡觉  打游戏

class Student{
    String name;
    int age;
    String gender;
    // 方法---成员方法、实例方法
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public void playGame(String game){
        System.out.println("打" + game);
    }
}

创建对象:  类名 + 对象名 = 初值;

例如: 创建一个学生类的对象

Student stu = new Student();
// 使用  对象名.属性名 = 值;  对对象的属性进行赋值和取值
stu.name = "IT彭于晏";
stu.age = "16";
stu.gender = "男";
// 调用成员方法  对象名.方法名();
stu.eat();
stu.sleep();
stu.playGame("毒奶粉"); 
 stu.sayHi(); //在类中声明一个sayHi方法,哪个对象调用该方法,打印的就是哪个对象的属性
三、成员变量与局部变量

成员变量与局部变量的区别:

1.书写位置不同:

成员变量:  类中方法外

局部变量:  方法中或方法上(参数位置)

2.在内存中的表现不同:

成员变量:  堆内存中

局部变量:  栈内存中

3.生命周期不同:

成员变量:  随着对象进入堆内存中创建,随着对象的销毁而销毁

局部变量:  随着方法的调用而入栈,随着方法的结束而销毁

4.作用域不同:

成员变量:  整个类中

局部变量:  方法中

5.初始值不同:

成员变量:  跟堆内存一样,有默认的初始值 0 null

局部变量:  默认没有初值 不给初值编译时会报错 (局部变量声明时必须带有初值)

四、同名类

在同一个项目中可以有同名的类,创建在不同的包下

创建不同包下的同名类,需要指定完整的包名来创建对象

一般情况下不建议写同名类

例如: 在包3和包4下各创建一个person类

//创建一个包3类的person对象

Person p1 = new Person( );

//在继续创建一个包4类下的person对象

com.bao3.Person p2 = new com.bao3.Person( ); // 需要指定完整的包名

注意: 

在方法中基本数据类型的传递是值   引用数据类型则是地址的传递 (要什么类型给什么类型)


五、匿名对象

匿名对象: 没有名字的对象

1. 一般 在方法传参的时候调用

2. 只调用一下方法(不赋值的情况下)

使用匿名对象当方法的参数 可以减少代码量,方便使用

public static void main(String[] args) {
		// 创建两个Person对象 并赋值
		// 将重复代码 抽成一个方法
		Person p1 = new Person();
		p1.name = "linqingxia";
		p1.age = 16;
		p1.sayHi();
		Person p2 = new Person();
		setNameAndAge(p2, "wangzuxian", 25);
		// 使用匿名对象 当方法的参数
		setNameAndAge(new Person(), "maoqiu", 20);
		// 匿名对象 也是对象 也可以赋值 调用成员方法
		new Person().name = "xin";
		new Person().age = 30; 
		new Person().sayHi(); // 注意: 获取不到"xin" 30----每new一次在堆内存中新生成一块空间
		// 只调用方法可以使用匿名对象
		// 测试方法的时候 可能会使用
		new Person().fun();
	}
六、封装与构造方法
    封装

Java中 写 方法、函数 就是封装的一种

封装相当于隐藏了代码的实现和属性 不能随意修改

需要开放访问的接口(方法 方式) 来获取或修改封装的代码

优点:

1.提高了代码的复用性

2.提高了代码的安全性

关键字 中的 权限修饰符--> private 私有的

被private修饰的属性 只能本类中访问

java bean 规范(java的实体类创建出来的对象)

1.声明成员变量 都需要 私有化

2.给每个成员变量提供set和get方法

3.必须提供 无参的构造方法

class Phone{
    private String phoneName;
   
    // 获取方法
    public String getPhoneName(){
       return phoneName;
    }
    // 修改方法
    public void setPhoneName(String phoneName){
       this.phoneName = phoneName;
       // 关键字 this 代表的是本类的对象
		// this.成员变量  获取本类的成员变量
		// this.成员变量 = "哈哈";  给本类的成员变量赋值
		// this.成员方法  调用本类的成员方法
		// 谁调用了这个方法 谁就是this
    }
}

命名规范 

获取  get + 成员变量名(首字母大写)

修改  set + 成员变量名(首字母大写)

标准写法 set方法 是没有返回值的

    构造方法

构造方法: 对对象的成员变量 进行初始化

写法:

1. 没有返回值位置(void也不用写)

2. 构造方法的方法名 要与 类名 完全一致

构造方法是系统帮你调用的

只要你创建对象 系统就会自动调用构造方法

构造方法 只会执行一遍

class Pen {
	/*
	 * 类中书写顺序
	 * 1.成员变量
	 * 2.构造方法---无参的 有参的
	 * 3.成员方法---sayHi之类的 自己写的
	 * 4.set/get方法
	 */
	private String name;
	private String color;
	
	// 构造方法(无参)
	public Pen() {
		// 初始化成员变量(给成员变量赋值)
		this.name = "圆珠笔";
		this.color = "红色";
		System.out.println("我是pen类的无参构造方法");
	}
	
	// 有参构造方法(构造方法的重载)
	// 为了在创建对象的同时 给成员变量赋值
	public Pen(String name,String color) {
		this.name = name;
		this.color = color;
		System.out.println("我是有参的构造方法");
	}
}
// 介绍自己的方法
	public void sayHi() {
		String name = "linaiang";
		// 使用this 可以区分 成员变量 和 局部变量
		System.out.println(this.name + " " + this.color);
	}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 基础核心总结》 Java 概述 什么是 Java2 Java 的特点Java 开发环境 JDK JRE Java 开发环境配置 Java 基本语法 数据类型基础语法运算符 Java 执行控制流程条件语句 if 条件语句 if...else 条件语句if...else if 多分支语句switch 多分支语句 循环语句 while 循环语句do...while 循环for 循环语句 跳转语句 break 语句 continue 语句面向对象 类也是-种对象对象的创建 属性和方法 构造方法 方法重载 方法的重写 初始化 类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 PriorityQueue HashMap TreeMap 类 LinkedHashMap 类 Hashtable 类IdentityHashMap 类WeakHashMap 类 Collections 类集合实现类特征图 泛形 泛型的使用 用泛型表示类 用泛型表示接口泛型方法 泛型通配符 反射 Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 枚举和普通类-样枚举神秘之处 枚举类 I/O File 类 基础 IO 类和相关方法InputStream OutputStream Reader 类Writer 类 InputStream 及其子类 OutputStream 及其子类Reader 及其子类Writer 及其子类 注解 关于 null 的几种处理方式大小写敏感 null 是任何引用类型的初始值 null 只是-种特殊的值使用 Null-Safe 方法null 判断 关于思维导图 Java.IO Java.lang Java.math Java.net Java 基础核心总结 V2.0 IO 传统的 BIO BIO NIO 和 AIO 的区别什么是流 流的分类 节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO 拷贝文件的区别操作系统的零拷贝 选择器(Selectors) 选择键(SelectionKey) 示例:简易的客户端服务器通信 集合 集合框架总览 -、Iterator Iterable ListIterator 二、Map 和 Collection 接口Map 集合体系详解 HashMap LinkedHashMap TreeMap WeakHashMap Hashtable Collection 集合体系详解 Set 接口 AbstractSet 抽象类SortedSet 接口HashSet LinkedHashSet TreeSet List 接口 AbstractList 和 AbstractSequentialList Vector Stack ArrayList LinkedList Queue接口Deque 接口 AbstractQueue 抽象类LinkedList ArrayDeque PriorityQueue 反射的思想及作用 反射的基本使用 获取类的 Class 对象构造类的实例化对象获取-个类的所有信息 获取类的变量(Field) 获取类的方法(Method) 获取类的构造器(Constructor) 获取注解 通过反射调用方法反射的应用场景 Spring 的 IOC 容器反射 + 抽象工厂模式 JDBC 加载数据库驱动类反射的优势及缺陷 增加程序的灵活性破坏类的封装性 性能损耗 代理模式 静态代理与动态代理常见的动态代理实现JDK Proxy CGLIB JDK Proxy 和 CGLIB 的对比动态代理的实际应用 Spring AOP 变量 变量汇总实例变量 实例变量的特点全局变量 静态变量 静态变量的特点类变量 局部变量

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值