JavaSE学习笔记05面向对象编程01
面向对象编程01
java的核心思想就是OOP
面向过程&面向对象
面向过程思想:
- 步骤清晰简单,第一步做什么,第二步做什么......
- 面向过程适合处理一些较为简单的问题
面向对象思想:
- 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后才对某个分类下的细节进行面向过程的思索
- 面向对象适合处理复杂的问题,适合处理需要多人协作的问题
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
面向对象编程(Object-Oriented Programming,OOP)
面向对象编程的本质就是:以类的方式组织代码,以对象的形式组织(封装)数据
三大特性:封装、继承、多态
1.回顾方法
方法的定义
package com.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 int max(int a,int b){
return a > b ? a : b;//三元运算符
}
}
方法的调用
package com.oop.demo01;
public class Demo02 {
public static void main(String[] args) {
//实例化这个类new
//对象类型 对象名 = 对象值
Student student = new Student();
//调用
student.say();
}
}
package com.oop.demo01;
//学生类
public class Student {
//非静态方法
public void say(){
System.out.println("学生说话了");
}
}
package com.oop.demo01;
public 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;
}
}
值传递与引用传递
package com.oop.demo01;
//值传递
public class Demo04 {
public static void main(String[] args) {
int a = 1;
System.out.println(a);//1
Demo04.change(a);
System.out.println(a);//1
}
//返回值为空
public static void change(int a){
a = 10;
}
}
package com.oop.demo01;
//引用传递:对象,本质还是值传递
public class Demo05 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);//null
Demo05.change(person);
System.out.println(person.name);//阿波
}
public static void change(Person person){
//person是一个对象:指向的--->Person person = new Person();这是一个具体的人,可以改变属性!
person.name = "阿波";
}
}
//定义了一个Person类,有一个属性:name
class Person{
String name;//默认值为null
}
变量知识点补充
java中一共有三大变量:局部变量、实例变量(对象级别)、静态变量(类级别)
局部变量存储在栈(stack)
实例变量存储在堆内存
静态变量存储在方法区
2.类与对象的关系
类是一种抽象的数据类型,它是对某一类事物的整体描述/定义,但是并不能代表某一个具体的事物
- 动物、植物、手机、电脑......
- Peson类、Pet类、Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为
对象是抽象概念的具体实例
- 张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例
- 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念
创建与初始化对象
对象的创建和使用:
类是一个模板,通过一个类,是可以创建N多个对象的
new是一个运算符,专门负责对象的创建
//例:
XueSheng s1 = new XueSheng();
S1是变量名(局部变量),XueSheng是变量s1的数据类型(引用数据类型),XueSheng()是一个对象(学生类创建出来的学生对象)
package com.oop.demo02;
//使用new关键字创建对象
//一个项目应该只有一个main方法
public class Application {
public static void main(String[] args) {
//类,抽象的,实例化
//类实例化后会返回一个Student类的具体实例
//student对象就是一个Student类的具体实例
Student xiaoming = new Student();
Student xiaohong = new Student();
xiaoming.name = "小明";
xiaoming.age = 3;
System.out.println(xiaoming.name);
System.out.println(xiaoming.age);
xiaohong.name = "小红";
xiaohong.age = 3;
System.out.println(xiaohong.name);
System.out.println(xiaohong.age);
}
}
package com.oop.demo02;
//学生类
public class Student {
//属性:字段
String name;//默认值为null
int age;//默认值为0
//方法
public void study(){
System.out.println(this.name + "在学习");
}
}
构造方法
使用new创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
- 必须和类的名字相同
- 必须没有返回值类型,也不能写void
package com.oop.demo02;
public class Application {
public static void main(String[] args) {
//new 实例化了一个对象
Person person = new Person();
System.out.println(person.name);//阿波
Person person1 = new Person("波波");
System.out.println(person1.name);//波波
}
}
package com.oop.demo02;
public class Person {
//一个类即使什么都不写,他也会存在一个构造方法
String name;
//显示的定义构造器
//无参构造
//实例化初始值,使用new关键字本质上是在调用构造器
public Person(){
this.name = "阿波";
}
//有参构造,一旦定义了有参构造,无参构造必须显示定义
public Person(String name){
this.name = name;
}
}
/*
1.快捷键:Alt + insert会弹出一个小窗口
2.选择Constructor,勾选参数再点0k即可
3.若要选择无参,选择Constructor后点select none
*/
构造方法的作用:
创建对象
给属性赋值
注意:
构造方法支持重载
当一个类没有提供任何构造方法的时候,系统会默认提供一个无参数的构造方法(这个方法被称为缺省构造器)
手动定义有参的构造方法,无参数构造方法将消失(保险一些建议将无参数的构造方法手写出来)
构造方法中没有手动赋值,统一都会默认赋值,默认赋系统值
空指针异常
空引用访问对象相关的数据时,会出现空指针异常(NullPointerException)
Public class NullPointerTest{
Public static void main(String[] args){
//创建客户对象
Customer c = new Customer();
//访问这个客户的id
System.out.println(c.id);//0
//重新给id赋值
c.id = 9527;
System.out.println(“客户的id是” + c.id);
c = null;
// NullPointerException
//编译没问题,因为编译器只检查语法
//但是运行的时候需要对象的存在,但是对象没了(null)
//就只能出现异常
System.out.println(c.id);
}
}
Class Customer{
int id;
}
3.静态代码块和实例语句块(扩展)
static(静态的)关键字
所有static关键字修饰的都是类相关的,类级别的
都采用类名.的方式访问
Static修饰的变量:静态变量
Static修饰的方法:静态方法
//静态代码块语法:
Static{
Java语句;
Java语句;
}
//特点:静态代码块在类加载时执行,并且只执行一次
//作用:记录类加载的日志信息
Public class Test{
//静态代码块
Static{
System.out.println(“A”);
}
//一个类当中可以编写多个静态代码块
Static{
System.out.println(“B”);
}
//入口
Public static void main(String[] args){
System.out.println(“Hello World!”);
}
Static{
System.out.println(“C”);
}
}
//运行结果:A,B,C,Hell World!
//注意:静态代码块在main方法执行之前执行
//实例语句块
//语法:
{
Java语句;
Java语句;
}
//只要是构造方法执行,必然在构造方法执行之前,自动执行“实例语句块”中的代码
4.this关键字
一个对象一个this,this存储在堆内存当中对象的内部
this是一个变量,一个引用,this保存当前对象的内存地址,指向自身
this不能使用在静态方法中,this只能使用在实例方法中,谁调用这个实例方法,this就是谁,所以this代表的是:当前对象
大部分情况下this可以省略
JavaSE学习笔记05面向对象编程01的更多相关文章
- javascript 学习笔记之面向对象编程(一):类的实现
~~想是一回事,做是一回事,写出来又是一回事~~一直以来,从事C++更多的是VC++多一些,从面向过程到面向对象的转变,让我对OO的编程思想有些偏爱,将一个客观存在的规律抽象出来总是让人比较兴奋,通过 ...
- python 学习笔记7 面向对象编程
一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...
- C++ Primer 学习笔记_67_面向对象编程 --转换与继承、复制控制与继承
面向对象编程 --转换与继承.复制控制与继承 I.转换与继承 引言: 由于每一个派生类对象都包括一个基类部分,因此能够像使用基类对象一样在派生类对象上执行操作. 对于指针/引用,能够将派生类对象的指针 ...
- javascript 学习笔记之面向对象编程(二):继承&多态
~~接上篇~~上一篇实现了类的实现以及类成员变量和方法的定义,下面我们来了解下面向对象中两个最重要的特性:继承和多态. 继承 js中同样可以实现类的继承这一面向对象特性,继承父类中的所有成员(变量和属 ...
- C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域
面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:假设不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这样的类作用域的层次嵌套使 ...
- Spark学习笔记11面向对象编程
面向对象编程 11.1 object类 11.1.1定义一个简单的类 11.1.2 field的getter与setter 定义类包含,定义类的field及方法.其格式如下 class Cla ...
- C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...
- python学习笔记(七):面向对象编程、类
一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
- python自动化测试学习笔记-7面向对象编程,类,继承,实例变量,邮件
面向对象编程(OOP)术语: class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 ...
随机推荐
- 第3课 - 启航Lua之路
第3课 - 启航Lua之路 1. Lua中的变量 (1)变量:全局变量和局部变量 — Lua中支持全局变量和局部变量的概念 全局变量:直接定义变量名,并复制 a = 1; -- 用 ; 结束当前语 ...
- C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法
1.定位线概念:某个方位的影像在另一个方向的影像上的投影相交线,例如横断面(从头到脚的方向)在矢状面(从左手到右手)上的影像投影面交线. 举个例子:右边的是MR(核磁共振)的某一帧切片,这是从头开始扫 ...
- 分布式系统监视zabbix讲解四之可视化
图形 概述 随着大量的监控数据被采集到Zabbix中,如果用户可以以可视化的表现形式来查看发生了什么事情,那么和仅仅只有数字的表现形式比起来则更加轻松. 以下是进行图形设置的地方.图形可以一目了然地掌 ...
- 解Bug之路-记一次对端机器宕机后的tcp行为
解Bug之路-记一次对端机器宕机后的tcp行为 前言 机器一般过质保之后,就会因为各种各样的问题而宕机.而这一次的宕机,让笔者观察到了平常观察不到的tcp在对端宕机情况下的行为.经过详细跟踪分析原因之 ...
- 正则表达式基础(Regular Expression)
正则表达式简介 n 为什么需要正则表达式? q 文本的复杂处理. n 正则表达式的优势和用途? q 一种强大而灵活的文本处理工具: q 提供了一种紧凑的.动态的方式,能够以一种完全通用的方式 ...
- 从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞
从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞 pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 其本质是Picklin ...
- OSI和TCP/IP参考模型
分层思想: 分层模型是一种开发网络协议的设计方法. 把节点之间的通讯这个复杂的问题,分成了若干个简单的小问题逐一解决. 把网络相邻节点之间通过接口进行通信,下层为上层提供服务.当网络发生故障,很容易确 ...
- 推荐一个超牛的SpringCloud微服务项目,开发脚手架
前言 Cloud-Platform是国内首个基于Spring Cloud微服务化开发平台,具有统一授权.认证后台管理系统,其中包含具备用户管理.资源权限管理.网关API 管理等多个模块,支持多业务系统 ...
- Windows无法安装到GPT格式磁盘的根本解决办法 - 初学者系列 - 学习者系列文章
上次在MSDN系统QQ群里有朋友问到在安装操作系统的时候有个问题:Windows无法安装到GPT格式磁盘,见图: 我在这里说下,使用网上方法的都是小白,就是说网上那些都是小白.下面介绍如何正确安装操作 ...
- java安全编码指南之:敏感类的拷贝
目录 简介 一个简单的SensitiveObject SensitiveObject的限制 对SensitiveObject的攻击 解决办法 简介 一般来说class中如果包含了私有的或者敏感的数据的 ...