面向对象·一级

面向对象思想概述

* A:面向过程思想概述

    * 第一步

    * 第二步

* B:面向对象思想概述

    * 找对象(第一步,第二步)

* C:举例

    * 买煎饼果子

    * 洗衣服

* D:面向对象思想特点

    * a:是一种更符合我们思想习惯的思想

    * b:可以将复杂的事情简单化

    * c:将我们从执行者变成了指挥者

        * 角色发生了转换

* E:面向对象开发

    * 就是不断的创建对象,使用对象,指挥对象做事情。

* F:面向对象设计

    * 其实就是在管理和维护对象之间的关系。

* G:面向对象特征

    * 封装(encapsulation)

    * 继承(inheritance)

    * 多态(polymorphism)

类与对象概述

* A:我们学习编程是为了什么

    * 为了把我们日常生活中实物用学习语言描述出来

* B:我们如何描述现实世界事物

    * 属性    就是该事物的描述信息(事物身上的名词)

    * 行为    就是该事物能够做什么(事物身上的动词)

* C:Java中最基本的单位是类,Java中用class描述事物也是如此

    * 成员变量    就是事物的属性

    * 成员方法    就是事物的行为

* D:定义类其实就是定义类的成员(成员变量和成员方法)

    * a:成员变量    和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。

    * b:成员方法    和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。

* E:类和对象的概念

    * a:类:是一组相关的属性和行为的集合

    * b:对象:是该类事物的具体体现

    * c:举例:

        * 类     学生

        * 对象    具体的某个学生

学生类的定义

* A:学生事物

* B:学生类

* C:案例演示

    * 属性:姓名,年龄,性别

    * 行为:学习,睡觉

class Demo1_Student {
public static void main(String[] args) {
//创建对象的格式:类名 对象名 = new 类名();
//对象名:其实就是合法的标识符,如果是一个单词所有字母小写,如果是多个单词,从第二个单词开始首字母大写
Student s = new Student();
//* D:如何使用成员变量呢?
//* 对象名.变量名
s.name = "张三";
s.age = 23; System.out.println(s.name + "..." + s.age);
//* E:如何使用成员方法呢?
//* 对象名.方法名(...)
s.study();
s.sleep();
}
} /*
* A:案例演示
* 属性:姓名,年龄,性别
* 行为:学习,睡觉 * B:我们如何描述现实世界事物
* 属性 就是该事物的描述信息(事物身上的名词)
* 行为 就是该事物能够做什么(事物身上的动词)
* C:Java中最基本的单位是类,Java中用class描述事物也是如此
* 成员变量 就是事物的属性
* 成员方法 就是事物的行为
* D:定义类其实就是定义类的成员(成员变量和成员方法)
* a:成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
* b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。
*/ class Student {
String name; //姓名
int age; //年龄
String gender; //性别 public void study() { //定义学习的方法
System.out.println("学生学习");
} public void sleep() { //定义睡觉的方法
System.out.println("学生睡觉");
}
}

手机类的定义

* 模仿学生类

    * 属性:品牌(brand)价格(price)

    * 行为:打电话(call),发信息(sendMessage)玩游戏(playGame)

class Demo2_Phone {
public static void main(String[] args) {
//创建对象
Phone p = new Phone();
//调用对象中的属性并赋值
p.brand = "锤子";
p.price = 998; System.out.println(p.brand + "..." + p.price); //调用成员方法
p.call();
p.sendMessage();
p.playGame();
}
} /*
* 模仿学生类
* 属性:品牌(brand)价格(price)
* 行为:打电话(call),发信息(sendMessage)玩游戏(playGame) */
class Phone {
String brand; //品牌
int price; //价格 public void call() { //打电话
System.out.println("打电话");
} public void sendMessage() { //发信息
System.out.println("发信息");
} public void playGame() { //玩游戏
System.out.println("玩游戏");
}
}

学生类的使用

* A:文件名问题

    * 在一个java文件中写两个类:一个基本的类,一个测试类。

    * 建议:文件名称和测试类名称一致。

* B:如何使用对象?

    * 创建对象并使用

    * 格式:类名 对象名 = new 类名();

* D:如何使用成员变量呢?

    * 对象名.变量名

* E:如何使用成员方法呢?

    * 对象名.方法名(...)

内存图

一个对象的内存图

二个对象的内存图

三个引用两个对象的内存图

成员变量和局部变量的区别

* A:在类中的位置不同

    * 成员变量:在类中方法外

    * 局部变量:在方法定义中或者方法声明上

* B:在内存中的位置不同

    * 成员变量:在堆内存(成员变量属于对象,对象进堆内存)

    * 局部变量:在栈内存(局部变量属于方法,方法进栈内存)

* C:生命周期不同

    * 成员变量:随着对象的创建而存在,随着对象的消失而消失

    * 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

* D:初始化值不同

    * 成员变量:有默认初始化值

    * 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。

    

* 注意事项:

    * 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是 就近原则。

    * 基本数据类型变量包括哪些:byte, short, int, long, float, double, boolean, char

    * 引用数据类型变量包括哪些:数组, 类, 接口, 枚举

方法的形式参数是类名的时候如何调用

* A:方法的参数是类名

public void print(Student s){}   

print(new Student());

* 如果你看到了一个方法的  形式参数  是一个 类 (引用类型),这里其实需要的是该类的对象。

匿名对象的概述和应用

* A:什么是匿名对象

    * 没有名字的对象

* B:匿名对象应用场景

    * a:调用方法,仅仅只调用一次的时候。

        * 好处:节省代码 
        * 注意:调用多次的时候,不适合。  匿名对象调用完毕就是垃圾 。 可以被垃圾回收器回收。

    * b:匿名对象可以作为实际参数传递

* C:案例演示

    * 匿名对象应用场景

/*
* A:什么是匿名对象
* 没有名字的对象
* B:匿名对象应用场景
* a:调用方法,仅仅只调用一次的时候。
* 那么,这种匿名调用有什么好处吗?
* 节省代码
* 注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。
* b:匿名对象可以作为实际参数传递
* C:案例演示
* 匿名对象应用场景
*/
class Demo2_Car {
public static void main(String[] args) {
/*Car c1 = new Car(); //创建有名字的对象
c1.run();
c1.run(); new Car().run(); //匿名对象调用方法
new Car().run(); */ //匿名对象只适合对方法的一次调用,因为调用多次就会产生多个对象,不如用有名字的对象 //匿名对象是否可以调用属性并赋值?有什么意义?
/*
匿名对象可以调用属性,但是没有意义,因为调用后就变成垃圾
如果需要赋值还是用有名字对象
*/
new Car().color = "red";
new Car().num = 8;
new Car().run();
}
} class Car {
String color; //颜色
int num; //轮胎数 public void run() {
System.out.println(color + "..." + num);
}
}
class Demo3_Car {
public static void main(String[] args) {
//Car c1 = new Car();
/*c1.color = "red";
c1.num = 8;
c1.run();*/
//method(c1); method(new Car()); //Car c2 = new Car();
//method(c2);
method(new Car()); //匿名对象可以当作参数传递
} //抽取方法提高代码的复用性
public static void method(Car cc) { //Car cc = new Car();
cc.color = "red";
cc.num = 8;
cc.run();
}
} class Car {
String color; //颜色
int num; //轮胎数 public void run() {
System.out.println(color + "..." + num);
}
}

封装的概述

* A:封装概述

    * 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

* B:封装好处

    * 隐藏实现细节,提供公共的访问方式

    * 提高了代码的复用性

    * 提高安全性。

* C:封装原则

    * 将不需要对外提供的内容都隐藏起来。

    * 把属性隐藏,提供公共方法 对其访问。

private关键字的概述和特点

* A:人类赋值年龄的问题

* B:private关键字特点

    * a:是一个权限修饰符

    * b:可以修饰成员变量和成员方法

    * c:被其修饰的成员只能在本类中被访问

* C:案例演示

    * 封装和private的应用:

    * a: 把成员变量用private修饰

    * b: 提供对应的getXxx()和setXxx()方法

    * c: private仅仅是封装的一种体现形式,不能说封装就是私有

class Demo1_Person {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "张三"; //调用姓名属性并赋值
//p1.age = -17; //调用年龄属性并赋值
//p1.speak(); //调用行为 p1.setAge(-17); System.out.println(p1.getAge());
}
} class Person {
String name; //姓名
private int age; //年龄 public void setAge(int a) { //设置年龄
if (a > 0 && a < 200) {
age = a;
}else {
System.out.println("请回火星吧,地球不适合你");
} } public int getAge() { //获取年龄
return age;
} public void speak() {
System.out.println(name + "..." + age);
}
}

this关键字的概述和应用

* A:this关键字特点

    * 代表当前对象的引用

* B:案例演示

    * this的应用场景

    * 用来区分成员变量和局部变量重名

手机类代码及其测试

* 请把手机类写成一个标准类,然后创建对象测试功能。

class Demo2_Phone {
public static void main(String[] args) {
Phone p1 = new Phone();
p1.setBrand("三星");
p1.setPrice(5288); System.out.println(p1.getBrand() + "..." + p1.getPrice());
p1.call();
p1.sendMessage();
p1.playGame();
}
}
/*
手机类
属性:品牌brand,价格price
行为:打电话call,发短信sendMessage,玩游戏,playGame
*/
class Phone { //java bean
private String brand; //品牌
private int price; //价格 public void setBrand(String brand) { //设置品牌
this.brand = brand;
} public String getBrand() { //获取品牌
return this.brand; //this.可以省略,你不加系统会默认给你加
} public void setPrice(int price) { //设置价格
this.price = price;
} public int getPrice() { //获取价格
return price;
} public void call() { //打电话
System.out.println("打电话");
} public void sendMessage() { //发短信
System.out.println("发短信");
} public void playGame() { //玩游戏
System.out.println("玩游戏");
}
}

Java 面向对象 01的更多相关文章

  1. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  2. 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用

    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...

  3. 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字

    084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...

  4. 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法

    083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...

  5. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  6. 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字

    081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...

  7. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  8. 079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象

    079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象 本文知识点:实例化对象 说明:因为时间紧张,本人写博客过程中只是对知 ...

  9. 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类

    078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...

  10. 077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象

    077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...

随机推荐

  1. SQL Server 远程连接配置

    打开sql server配置工具 SQL Server网络配置→SQLEXPRESS的协议→启用TCP/IP→右键属性→IP地址→IPALL端口修改为1433→重启SQL Server服务 https ...

  2. VMX - block by NMI和 NMI unblockinig due to IRET 之间的关系

    相关SDM章节: 27.2.3- Information About NMI Unblocking Due to IRET 最近收到同事发来的一个问题,即: VMCS 中的 Guest Interru ...

  3. MHA 高可用介绍

    目录 MHA 介绍 MHA 简介(Master High Availability) MHA 工作原理(转载) MHA 架构 MHA 工具 Manager 节点 Node 节点 MHA 优点 MHA ...

  4. 牛客网-Beautiful Land 【01背包 + 思维】

    链接:https://www.nowcoder.com/acm/contest/119/F来源:牛客网 Now HUST got a big land whose capacity is C to p ...

  5. java有序数组的有序交集

    public static void main(String[] args) throws ParseException { int[] a = {4,5,-1,-1}; int[] b = {-1, ...

  6. 使用nodejs爬取图片

    在运行代码前,请确保本机是否有nodejs环境 1 D:\ > node -v 2 v12.1.0 //版本号 需要用到的包 axios //请求页面 cheerio // 把get请求的页面 ...

  7. CSS3 动态生成内容(在Web中插入内容)====CSS的伪类或者伪元素

    # css3 .类:伪类::伪元素 /* CSS3伪元素/伪类 :https://www.w3.org/TR/css3-selectors/#selectors ::selection 伪元素(F12 ...

  8. CSS3实现 垂直居中 水平居中 的技巧

    1 1 1 How To Center Anything With CSS Front End posted by Code My Views 1 Recently, we took a dive i ...

  9. TypeScript tuple 元组

    TypeScript tuple 元组 元组类型允许您用固定数量的元素表示数组,这些元素的类型是已知的,但不必相同. "use strict"; /** * * @author x ...

  10. javascript nested object merge

    javascript nested object merge deep copy Object reference type function namespace(oNamespace, sPacka ...