Java关于面向对象
什么是面向对象
- 要理解面向对象思想,我们先要知道什么是对象?
- “万物皆为对象!!!”《Java编程思想》中提到“万物皆为对象”的概念。它将对象视为一种奇特的变量,它除了可以存储数据之外还可以对它自身进行操作。它能够直接反映现实生活中的事物,例如人、车、小鸟等,将其表示为程序中的对象。每个对象都具有各自的状态特征(也可以称为属性)及行为特征(方法),java就是通过对象之间行为的交互来解决问题的。
- 面向对象就是把构成问题的事物分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事物在解决问题中的行为。
- 类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。
- Java的核心思想就是面向对象编程(Object-Oriented Prodramming)
- 面向对象的本质就是:以类的方式组织代码,以对象的组织(封装)数据
- 从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象
- 从代码运行角度考虑是先有类后有对象。类是对象的模板
- 类具有三个特性:封装、继承和多态。
- 抽象
面向过程&面向对象
面向过程思想
步骤清晰简单,第一步做什么,第二步做什么…
面向过程适合处理一些简单的问题
面向对象思想
物以类聚,分类思维模式,思考问题首先会解决问题需要那些分类,然后对这些分类进行单独思考。最后才对某个分类下的细节进行面向过程的思索。
面向对象适合处理复杂的问题,适合处理需要多人协作的问题!
对于描述复杂的事物,为了宏观的把握,从整体上合理分析,我们需要使用面向对象来分析整个系统。但是,具体到微观操作,仍然需要面向过程思路去处理。
回顾方法及加深
方法的定义
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,…){
执行语句
………
return 返回值;
}
- break和return的区别:break可以跳出switch语句,结束循环结束整个循环
package Rabbit02.oop.demo01;
//Demo01就是一个类
public class Demo01 {//main方法public static void main(String[] args) {}/*修饰符 返回值类型 方法名(...){//方法体return 返回值;}*/// return结束方法,返回一个结果public String sayHello(){return "hello,world";}public void print(){return ;}public void hello(){ //如果返回一个void(空的)只需要return一下就好了return;}public int max(int a,int b){return a>b ? a : b; //三元运算符!!}
}
- 方法名:注意规范就OK 驼峰原则 见名知意
- 参数列表:(参数类型,参数名)…一个方法有多个参数
- 异常抛出:???后面会说
//数组下标越界也是异常:Array index out of boundspublic void readFile(String file) throws IOException{ //抛出异常先认识一下}
方法的调用:递归
静态方法:简单理解为加了static的方法,调用方法——(类名.方法名;)就可以实现调用
ackage Rabbit02.oop.demo01;public class Demo02 {public static void main(String[] args) {Student.say();}}
package Rabbit02.oop.demo01;//学生类
public class Student {静态方法public static void say(){System.out.println("学生说话了");}
}
学生说话了Process finished with exit code 0
- 非静态方法:实例化这个类 new了一个对象,----(对象类型 对象名 = 对象值;)例:Student student = new Student(); 用对象时 (对象的名字.方法名;)例:student.say();
package Rabbit02.oop.demo01;public class Demo02 {public static void main(String[] args) {//实例化这个类//对象类型 对象名 = 对象值Student student = new Student();student.say();}}
package Rabbit02.oop.demo01;//学生类
public class Student {//非静态方法public void say(){System.out.println("学生说话了");}
}
学生说话了Process finished with exit code 0
最后,如果有两个静态的方法,它们可以互相调用;而静态方法调用不了非静态方法,因为静态方法是和类一起加载的。
public class Demo02 {public static void main(String[] args) {//实例化这个类//对象类型 对象名 = 对象值Student student = new Student();student.say();}// 和类一起加载的public static void a(){// b();}//类实例化之后才存在public void b(){}}
- 形参和实参:方法内的参数是形参,实际调用方法所添加进去的数值是实参
ublic class Demo03 {public static void main(String[] args) {//实际参数和形式参数的类型要保持对应!int add = Demo03.add(1,2);System.out.println(add);}public static int add(int a,int b){return a+b;}}
- 值传递和引用传递
值传递:值传递传递的是真实内容的一个副本,对副本的操作不影响原内容,也就是形参怎么变化,不会影响实参对应的内容。
//值传递
public class Demo04 {public static void main(String[] args) {int a = 1;System.out.println(a); //输出了1Demo04.change(a);System.out.println(a); //输出了1}//返回值为空public static void change(int a){a = 10;}}
引用传递:可以理解为值传递–>修改的是拿到的副本,原值并没有发生变化,引用传递–> 指针修改,因为引用指向原对象在在内存中的区域,所有可以修改原对象的值
//引用传递:传递一个对象,本质还是值传递//不会是因为不理解对象,内存这些概念
public class Demo05 {public static void main(String[] args) {Perosn perosn = new Perosn();System.out.println(perosn.name); //输出结果为 nullDemo05.change(perosn);System.out.println(perosn.name); //输出为兔子}public static void change(Perosn perosn){//perosn是一个对象:指向的---->Perosn perosn = new Perosn();这是一个具体的人,可以改变属性!perosn.name = "兔子";}}//定义了一个Perosn类,有一个属性:name
class Perosn{String name; //String类型默认值为 null
}
- this关键字:之后再说,this是指当前的对象谁调它它就是谁,等学到继承和多态时会了解。
类与对象的关系
类是一种抽象的数据类型它是对某一类事物整体描述定义但是并不能代表某一个具体的事物
◆动物、植物、手机、电脑.
◆ Person类、Pet类、Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为对象是抽象概念的具体实例
◆张三就是人的一个具体实例张三家里的旺财就是狗的一个具体实例。
◆能够体现出特点展现出功能的是具体的实例而不是一个抽象的概念。我们可以将这些思想转换为代码实现!图片理解:
创建与初始化对象
- 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
- 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
- 必须和类的名字相同
- 必须没有返回类型,也不能写void
- 构造器必须掌握!
package Rabbit02.oop.demo02;//一个项目应该只存在一个main方法
public class Application {public static void main(String[] args) {//类:抽象的,实例化//类实例化后会返回一个自己的对象!//student对象就是一个Student类的具体实例!Student xiaoming = new Student();Student xh = new Student();xiaoming.name = "小明";xiaoming.age = 3;System.out.println(xiaoming.name);System.out.println(xiaoming.age);xh.name = "小红";xh.age = 3;System.out.println(xh.name);System.out.println(xh.age);}
}
package Rabbit02.oop.demo02;//学生类
public class Student {//属性:字段String name; //默认值是nullint age; //默认值是0//方法public void study(){System.out.println(this.name+"在学习");}}//学程序好?对世界进行更好的建模!---宅?
//更应该出去交朋友,音乐,旅游,阅读,
输出:
小明
3
小红
3Process finished with exit code 0
构造器详解
在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。
关于构造器的名称
有两个问题:第一,所取的任何名字都有可能与类的某个成员名称相冲突;第二,调用构造器时编译器的责任,所以必须让编译器知道应该调用哪个方法。C++语言中采用的解决方案看起来最简单且符合逻辑,所以在Java中也采用了这种方案:即构造器采用与类相同的名称。由于这点,"每个方法首字母小写"的编码风格并不适用与构造器。
构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。Java 通过new 关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。
不接受任何参数的构造器叫做默认构造器,Java文档中通常使用的术语为无参构造器。
格式:
【访问权限修饰符】类名(形参列表){
//方法体
}
构造器要点:1. 和类名相同;2. 没有返回值
作用:1. new 本质在调用构造器;2. 初始化对象的值
注意点:定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造
package Rabbit02.oop.demo02;//java---> class
public class Person {//一个类即使什么都不写,它也会存在一个方法//显示定义构造器String name;int age;//实例化初始值//1. 使用new关键字,必须要有构造器,本质是在调用构造器//2. 一般用来初始化值public Person(){this.name = "兔子";this.age=123;System.out.println("name:"+name+" "+"age:"+age);}//有参构造:一旦定义了有参构造,无参构造必须显式定义public Person(String name) {this.name = name;}//Alt+Insert一键生成有参无参}
/*public static void main(String[] args) {//new 实例化的一个对象Person person = new Person();person.age=555;System.out.println(person.age);
// System.out.println(person.name); //输出兔子
// System.out.println(person.age);}构造器:1. 和类名相同2. 没有返回值作用:1. new 本质在调用构造器2. 初始化对象的值注意点:定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造this. =*/
package Rabbit02.oop.demo02;//一个项目应该只存在一个main方法
public class Application {public static void main(String[] args) {//new 实例化的一个对象Person person = new Person();person.age=555;System.out.println(person.age);
// System.out.println(person.name); //输出兔子
// System.out.println(person.age);}
}
- 构造器方法的重载:构造方法也是方法,只不过有特殊的作用而已。与普通方法一样,构造方法也可以重载。如果构造方法中的形参名和属性(成员变量)相同时,需要使用this关键字区分属性与形参。
Java关于面向对象相关推荐
- java基础面向对象_Java基础面向对象
一.面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该 ...
- Java基础-面向对象第二特征之继承(Inheritance)
Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...
- 从C++到Java --理解面向对象是关键所在
从C++到Java --理解面向对象是关键所在 本文将提供一个对这些概念的简明的解释,而不是提供一些深入的或者如何使用的问题.记住,这只是依据我对Java的经验带而提出的一些主要的差异. Java在虚 ...
- Java 基础 - 面向对象(不错N多教程集合)
著作权归https://pdai.tech所有. 链接:Java 基础 - 面向对象 | Java 全栈知识体系 本文主要介绍Java OOP 面向对象基础和相关类图.@pdai Java 基础 - ...
- 第一部分 Java:面向对象理解
Java:面向对象理解.集合.IO.NIO.并发.反射源码分析 一.面向对象 1.创建对象的5种方式 (1)使用new关键字(2)使用Class类的newInstance方法(3)使用构造函数类的ne ...
- 学习Java编程面向对象的五大基本原则
Java 是面向对象的高级编程语言,类和对象是 Java 程序的构成核心.围绕着 Java 类和 Java 对象,有三大基本特性:封装是 Java 类的编写规范.继承是类与类之间联系的一种形式.而多态 ...
- java 168转换成861_java实验-java语言面向对象编程基础
java实验-java语言面向对象编程基础 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 广州大学学生实验报告广州大学学生实验报告 ...
- JAVA 的面向对象设计的特点-书后感-01-21天学通JAVA-深入分析
JAVA 作为面向对象的一种语言究竟有哪些特点.本文尝试列举最基本的一些:从<21天学通JAVA>中摘来一些概念,并且做了一定的深挖理解. 本章尝试重编译顺序角度理解JAVA继承的覆盖,重 ...
- java c 面向对象比较教程_c语言初学指针,对于java面向对象的初理解
最近在看关于c语言的指针,学习下,发现指针原来运用理解成其实可以抽象出我们java的面向对象封装,地址--> 对象或变量,先看一段代码: public class Cat { public St ...
- 【Java】面向对象是什么
自从开始接触java,就有人告诉我说,java是面向对象的编程语言.最多就是new一个对象,但是并不知道对象是什么.我以为对象就是一个class类,没有什么特别的.但开始找工作的时候,面试的人问了一个 ...
最新文章
- SQLiteOpenHelper类
- 利用ssh+rsync+inotify实现数据的异地实时同步
- Web前端性能优化——编写高效的JavaScript
- 影视或游戏:中国视效人才的「进与退」
- 【python】内存相关
- 在线预览(pptx、ppt、pps、docx、doc、xlsx、xls)
- (转)基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动...
- JS实现将所有超链接指向同一个页面地址
- Spring MVC (mvc框架)
- dreamweaver半角空格_在Dreamweaver MX中,中文输入时要输入空格应该()。A.在编辑窗口直接输入一个半角空格B.代码中输入...
- java 防止反射_解决反射型XSS漏洞攻击
- CSS 3之美化表格样式
- python爬取图虫网图库
- 魔咒词典 HDU - 1880 (字符串hash 单hash转int或者 双hash )
- PCB多层板层的设置原则
- element rules不生效
- JSF Chapter11
- 哪个软件能实盘测试策略,Quicklib提供期货CTA策略实盘模拟监控的好工具(原创)...
- 基于QT的人脸识别考勤管理系统【一】
- camunda7、camunda8对比分析,哪个版本好