java面向对象基础知识

一、面向对象与面向过程的区别:

①所处的角色不同:前者指挥者,后者执行者;②所需知道的事情不同:前者知道哪些是做这些事情的人就可以,不需了解具体的事情操作的过程。后者需要具备应有的技能来做这些事情。

二、面向对象的基本操作过程

指挥者采用面向对象思想,通过创建类,来创建统一的属性值【成员属性】和(做事的)方法【成员方法】。

通过创建的类或者jdk已有的类,来创建具体的对象,属性值明确,方法明确。

举例:创建类

 1 package com.oracle.demo02;
 2
 3 public class Person {
 4     private String name;// 此时外部的类不能访问
 5     private int age;// 隐藏实现细节
 6     // 使用方法,提供接口进来的值 属性都私有化,并提供setXxx getXxx方法对其进行访问。
 7
 8     public void setName(String name) {
 9         this.name = name;
10     }
11
12     // 使用取值、、用于给出用户反馈
13     /*
14      * public String getName(){ return name; }
15      */
16     public void setAge(int a) {
17         if (a >= 0 && a < 149) {
18             age = a;
19         } else {
20             System.out.println("该年龄不可信");
21         }
22
23     }
24
25     public int getAge() {
26         System.out.println("get");
27         return age;
28     }
29
30     public void speak() {// 方法可以被外界访问
31         // name.age此时为成员变量,非局部变量
32         System.out.println("我的名字是" + name + "今年" + age + "岁。");
33     }
34
35     // 在person类中定义功能,判断两个人是否同龄人
36     public boolean people(Person p) {
37        return p.age==this.age;//此时的this,指的是谁调用该方法就是谁
38        //传入两个,一个通过调用传入,一个通过形参传入
39     }
40 }

举例:创建对象及方法的调用

 1 package com.oracle.demo02;
 2
 3 public class Demo01 {
 4     public static void main(String[] args) {
 5         Person p = new Person();
 6         p.setName("张三");
 7         p.setAge(35);
 8         p.speak();
 9         Person p2 = new Person();
10         p2.setName("xiao张三");
11         p2.setAge(35);
12         p2.speak();
13         //比较两人是否为同龄人
14         boolean flag=p2.people(p);
15         System.out.println(flag);
16     }
17 }

1、创建冰箱的对象

冰箱 bx = new 冰箱();

2、调用冰箱的功能

对象.功能();

bx.打开();

bx.存储(new 大象());

bx.关闭();

public class 类名 {

//可编写0至n个属性 成员变量

数据类型 变量名1;

数据类型 变量名2;

//可编写0至n个方法 成员方法

修饰符 返回值类型 方法名(参数){

执行语句;

}

}

注:此时的成员方法的修饰符为public,而在测试类main中修饰符为public static

三、对象调用方法内存图

四、类和对象的区别

前提:面向对象的思想力求在设计类的时候,其成员属性和成员方法与现实要求一致。


区别


对象

关系

抽象的,比如人类的皮肤属性,未有具体的值

具体的,通过类,new一个新的对象,给皮肤属性赋值(黑、白、黄)

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


区别

成员变量

局部变量

写法位置

直接定义在类中

定义在方法或{}语句中

内存位置

在堆中保存,具有地址

在栈中保存

生命周期

随着对象的出现而出现,使用gc()垃圾回收机制清除

随着方法的出现而出现,随着方法的消失而消失

初始化值

成员变量出现在堆中,属性有默认值;例如int 0;Boolean FALSE;String null;

局部变量出现在栈中,必须人为赋值才能使用

六、基本数据类型和引用数据类型的参数传递


区别

基本数据类型

引用数据类型
 
传递的具体的值,在栈中存在,方法用完执行弹栈

传递地址,在堆中存在,方法和main中均指向同一个地址和对象

七、面向对象的三个特征:封装、继承、多态

封装

封装:将功能封装到方法(最基本的封装体)时,将方法封装到类中。

封装的优势:①提高代码的复用性,提高代码的可读性。②隐藏了实现实现 private(私有,权限修饰符),可以对外提供访问(通过set/get方法)。③保证了安全性。

在类中,成员变量,成员方法为存值,取值,判定,方法的调用、操作打印、流程控制等尽量在main中实现

举例:private是私有的一种体现形式

class Person {

// 私有成员变量

private int age;

private String name;

// 对外提供设置成员变量的方法

public void setAge(int a) {

// 由于是设置成员变量的值,这里可以加入数据的验证

if (a < 0 || a > 130) {

System.out.println(a + "不符合年龄的数据范围");

return;

}

age = a;

}

// 对外提供访问成员变量的方法

public void getAge() {

return age;

}

}

this


变量

在类中方法

在方法中

相同名称的变量执行就近原则

代表类

谁调用了这个方法就代表谁,一般在赋值号的右边

继承的概念

在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。

注:此时同时会继承所有类的父类odject的属性和方法。

格式&使用

格式:

class 子类 extends 父类 {}

/*

* 定义员工类Employee

*/

class Employee {

String name; // 定义name属性

// 定义员工的工作方法

public void work() {

System.out.println("尽心尽力地工作");

}

}

/*

* 定义研发部员工类Developer 继承 员工类Employee

*/

class Developer extends Employee {

// 定义一个打印name的方法

public void printName() {

System.out.println("name=" + name);

}

}

/*

* 定义测试类

*/

public class Example01 {

public static void main(String[] args) {

Developer d = new Developer(); // 创建一个研发部员工类对象

d.name = "小明"; // 为该员工类的name属性进行赋值

d.printName(); // 调用该员工的printName()方法

d.work(); // 调用Developer类继承来的work()方法

}

}

原文地址:https://www.cnblogs.com/mlf19920916/p/12051412.html

时间: 2024-10-10 11:54:24

java面向对象基础知识的相关文章

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气

【Java面向对象基础(一)】数据类型与运算符

[喵"的Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符 1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数据类型 字节数 二进制位数 最小值 最大值 默认值 byte 1 8-bit -2^7 +2^7 - 1 0 short 2 16-bit -2^15 +2^15 - 1 0 int 4 32-bit -2^31 +2^31 - 1 0 long 8 64-bit -2^63 +2^63 - 1 0

【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder

[喵"的Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder 1.String String是Java中的一个final类,主要用于字符串的处理. 1.1 不可变性 String内的字符串是不可变的,每一次修改都会重新生成一个新的String对象实例. 例: 1 // 在堆中会创建一个"Hello"字符串实例,把地址赋给对象a 2 String a = new String("Hello&

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

什么才是java的基础知识?

近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多.编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑).但同时自己心里明白,自己其实没有什么水平,自己这3,4年以来学懂的东西就那么多,其他人几个月就可以

java多线程基础知识

1.ThrTest.java 继承Thread类方式 public class ThrTest extends Thread { private String name; public ThrTest() { } public ThrTest(String name) { this.name = name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + "运行 " + i

黑马程序员——java多线程基础知识1

多线程 进程是一个正在执行的程序. cpu在同时执行这些程序,其实是跳跃式的,做快速的切换,时间很短.一个进程可能存在多条路径.迅雷的多路径.每一个进行执行都有一个执行顺序,该顺序是一个执行路径,或这叫一个控制单元.每一个进程至少有一个线程,线程就是进程中的一个独立的控制单元,线程控制进程的执行.jvm启动的时候会有一个进程就叫做java,exe,该进程中至少有一个线程在控制Java程序的执行 ,而且该线程的执行代码在 主函数中.该线程称为主线程.虚拟机至少也有两个线程,一个主线程执行,另一个负

黑马程序员——Java多线程基础知识2

多线程协同 线程间的通讯:我们对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤.但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,我用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必