Java Study For Five Day( 面向对象一)
面向对象
1.面向对象的概念
2.理解面向对象
*面向对象其实是相对面向过程而言的,面向对象和面向过程都是一种思想,它们所强调的内容不一样。
*面向对象:强调的是功能的行为,将功能进行了封装成了对象,强调了具备功能的对象。
*面向对象是基于面向过程的
3.类与对象的关系
人开门:利用名词提炼法
人{
开门(门){
门.开();
}
}
门{
开(){
操作门轴等
}
}
4.面向对象的三大特征:封装、继承、多态。
以后开发其实就是找对象使用,没有对象就创建一个对象来使用,就像找女朋友一样,没有就自己找个,这里没有对象就自己建一个(当然也是要找适合的)。
找对象,建立对象,使用对象,并维护对象的关系。生活中的对象:张三,王五...
想要描述:提取对象中的共性内容,对具体的抽象。
反射到Java中,描述就是关键字class定义的类,而具体的对象就是对应Java在堆内存中是使用new关键字建立的实体。
类就是对现实生活中事物的描述,而对象就是这类事物实实在在存在的个体。

5.成员变量和局部变量的区别
1.作用范围:
成员变量作用于整个类中,局部变量只在某个范围内有效。(一般指的就是方法,语句体内)
2.在内存中的位置
成员变量随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中,而局部变量在方法被调用,或者语句被执行的时候存在,存储在栈内存中。
3.初始值
成员变量有默认初始值,局部变量没有默认初始值,使用前必须赋值。
6.匿名对象
匿名对象其实就是对象的简化形式
使用的两种情况:a.当对对象的方法仅进行一次的调用的时候;b.匿名对像可以作为实际参数进行传递
如果对一个对象进行多个成员调用,必须给这个对象起个名字
需求:汽车修配厂,对汽车进行改装,将来的车都改成黑车,三个轮胎。
public static void main(String[] args)
{
Car q = new Car();
show(q);
}
public static void show(Car c)
{
c.num = 3;
c.color = "black";
c.run();
}

封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
好处:将变化隔离;便于使用;提高重用性;提高安全性。
原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共的方法对其访问
关键字private:封装在代码中的体现
(1)私有的意思,权限修饰符
(2)用来修饰成员变量和成员函数
(3)用private修饰的成员只在本类中有效
(4)私有是封装的一种体现
class Person
{
private int age;
public void setAge(int a)
{
if(a>0 && a<130)
age =a;
else
System.out.println("false age");
}
public int getAge()
{
return age;
}
void speak()
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
//p.age = 20;//
p.setAge(20);
p.speak();
}
}
构造函数
特点:
1.函数名和类名相同
2.不用定义返回值类型
3.不用写return语句
作用:构造函数是用于创建对象,并对其进行初始化赋值,对象一建立就自动调用相对应的构造函数。
注意:
1.如果一个自定义类没有构造方法,系统会默认给出一个无参构造方法。
2.如果一个自定义类提供了构造方法,那么,系统将不再给出无参构造方法,这个时候,你可以不使用无参构造方法, 如果你想使用,那么,就必须手动给出无参构造方法。
建议:
一般情况下,我们的自定义类都要手动给出无参构造方法。
class Person1
{
private String name;
private int age;
Person1()
{
System.out.println("A:name="+name+",,age="+age);
cry();
}
Person1(String n)
{
name = n;
System.out.println("B:name="+name+",,age="+age);
cry();
}
Person1(String n,int a)
{
name = n;
age = a;
System.out.println("C:name="+name+",,age="+age);
cry();
}
public void cry()
{
System.out.println("cry..........");
}
}
class PersonDemo2
{
public static void main(String[]args)
{
Person1 p1 = new Person1();
Person1 p2 = new Person1("lisi");
Person1 p3 = new Person1("wangwu",10);
}
}
构造方法和成员方法的区别
A:格式区别
构造方法和类名相同,并且没有返回类型,也没有返回值。
普通成员方法可以任意起名,必须有返回类型,可以没有返回值。
B:作用区别
构造方法用于创建对象,并进行初始化值。
普通成员方法是用于完成特定功能的。
C:调用区别
构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数
普通成员方法是由创建好的对象调用,可以调用多次
构造代码块:
作用:给对象初始化,对象一建立就执行,而且优先于构造函数执行
和构造函数的区别
构造代码块是给所有不同对象的共性进行统一初始化
构造函数是给对应的对象进行初始化构造代码块中定义的不同的对象共性的初始化内容。
this关键字
(1)this关键字代表本类对象的一个引用,谁调用this所在的方法,this就代表谁
(2)this的使用场景
A:用于区分同名成员变量和局部变量;
B:在定义函数时,该函数内部要用到调用该函数的对象时,因为此时对象还没建立,故this代表此对象
C:构造函数间调用
这个时候,this(参数)必须作为第一条语句存在。
Person p = new Person();在内存中做了哪些事情。
(1)将Person.class文件加载进内存中。
(2)如果p定义在主方法中,那么,就会在栈空间开辟一个变量空间p。
(3)在堆内存给对象分配空间。
(4)对对象中的成员进行默认初始化。
(5)对对象中的成员进行显示初始化。
(6)调用构造代码块对对象进行初始化。(如果没有就不执行)
(7)调用构造方法对对象进行初始化。对象初始化完毕。
(8)将对象的内存地址赋值给p变量,让p变量指向该对象。
Java Study For Five Day( 面向对象一)的更多相关文章
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验二 面向对象程序设计 实验报告
20175316 盛茂淞 2018-2019-2 <Java程序设计>实验二 面向对象程序设计 实验报告 (一)单元测试 在 IDEA中我们把产品代码放在src目录中,把测试代码放在tes ...
- 第四节:详细讲解Java中的类和面向对象思想
前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...
- Java第三次作业——面向对象基础(封装)
Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...
- 20165222《Java程序设计》——实验二 面向对象程序设计
20165222<Java程序设计>——实验二 面向对象程序设计 提交点一.JUnit测试用例 知识点:这里就是了解测试代码的应用,测试代码的书写为:@Test assertEquals( ...
- Java第五次作业--面向对象高级特性(抽象类与接口)
Java第五次作业--面向对象高级特性(抽象类与接口) (一)学习总结 1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结. 2.汽车租赁公司,出租汽车 ...
- Java第四次作业——面向对象高级特性(继承和多态)
Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...
- Java第四次作业—面向对象高级特性(继承和多态)
Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...
- Java进击C#——语法之面向对象
本章简言 上一章笔者讲到关于ADO.NET相关的知识,知道了如何去访问数据库.本章将来讲关于面向对象的思想.不管在JAVA还是在C#面向对象思想的重要性都是占了一个很大的成份.往往他就像呼吸一样子,更 ...
- java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...
- Java中二维数组与面向对象
1:二维数组(理解) (1)元素是一维数组的数组. (2)格式: A:数据类型[][] 数组名 = new 数据类型[m][n]; B:数据类型[][] 数组名 = new 数据类型[m][]; C: ...
随机推荐
- 音视频 SDK |合理配置视频参数,提升使用质量
一.前言 在视频通话或直播时,开发者可以根据需要指定推流和拉流视频相关配置,如视频采集分辨率.视频编码输出分辨率.视频帧率.码率.视图模式和镜像模式. 设置合适的视频分辨率.帧率和码率可以在音视频场景 ...
- 搭建ipv6并发代理池
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 学习目标 ounter(l ...
- Go日志管理库zap
一.zap介绍 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1.能够将事件记录到文件中,而不是应用程序控制台. 2.日志切割-能够根据文件大小.时间或间隔等来切割日志文件. ...
- Electron加载服务器端JS:高效打造跨平台桌面应用与本地 API 交互
在现代桌面应用开发中,使用 Electron 加载远程服务器托管的前端资源,再与本地 API 交互,能够带来灵活的部署和强大的本地功能支持.这种方式不仅提升了开发效率,还能充分利用 PC 端的资源和性 ...
- Java 动态编译工具 Janino 和 Liquor 差别
如果你只要 Java7 及以下的语法支持,建议 Janino.如果要你想更全的 Java8.Java11.Java17.Java21 等语法,可以选 Liquor. 1.它们相同的地方 提供的相似的能 ...
- 在Activity中测量控件宽高的三种方式
在进行Android开发时,有时需要测量控件的宽和高,常用的方式有以下三种: (1)重写onWindowFocusChanged(hasFocus: Boolean)方法,在这个方法内获取控件的宽高 ...
- Vue 3 + Vite + SuerMap iClient构建报错Uncaught TypeError utils.inherits is not a function
一.现象 Uncaught TypeError: utils.inherits is not a function 二.问题产生原因 Elasticsearch本身就需要这些东西,以前没有问题是因为W ...
- 解决每次调试flask需要重启本地服务器的方法
export FLASK_ENV=development export FLASK_APP=hello.py flask run --debug
- 排查maven 冲突及解决方式
Maven Maven 是一个以项目为中心的自动化构建工具,主要用于Java项目的管理和构建.它提供了一种统一的方式来描述项目的结构.依赖关系和构建过程,简化了项目的构建和管理. Maven 的主要特 ...
- `operator++(int)` 和 `operator++()`
operator++(int) 和 operator++() 是 C++ 中重载的两个不同的自增运算符函数,它们分别用于后置自增和前置自增.它们的区别在于调用方式以及自增行为的不同. 1. 前置自增运 ...