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 ...
随机推荐
- [ArcGIS]高程地图-把DEM栅格数据(.tif)转换为TIN矢量数据,并储存TIN数据。
把DEM数据(.tif)获得栅格数据对应的经纬度及高程信息,存到地理数据库 一.预处理工作 栅格数据的合并--目的:将原始4张Dem(.tif)数据合并为一张Dem(.tif) https://wen ...
- java注解(1)
Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.注解是Java SE5中引入的重要的语言 ...
- Docker:二、开始部署第一个Asp.net应用
各位看官大家好,接着上一篇,我们构建自己的镜像文件成功之后,准备开始部署自己的第一个docker应用了... 接着上文,我们构建自己的镜像,如下是Dockerfile文件 #引入运行环 ...
- Spring学习(四)IOC详解
一.简介 概念:控制反转是一种通过描述(在 Java 中可以是 XML 或者注解)并通过第三方(Spring)去产生或获取特定对象的方式.(被动创建) 优势: ① 降低对象之间的耦合 ② 我们不需要理 ...
- Codeforces Round #673 (Div. 2)
[Codeforces Round #673 (Div. 2) ] 题目链接# A. Copy-paste 思路: 贪心的策略.每次只加上最小的就可以了 #include<bits/stdc++ ...
- get请求传递json格式数据的两种方法
get请求参数为json格式数据,使用pyhton+request的两种实现方式如下: 方法一:使用requests.request() 示例代码如下: 1.导入requests和json impor ...
- (转载)CPU基础知识
本文转载自网络. 如有侵权,请联系处理! 简介 中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Con ...
- Apache HTTP Server 2.2.34安装
Windows 下载 安装方式有自己编译源码和下载别人编译好的,这里选择从第三方下载,官网地址http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/bin ...
- Centos-关机重启
为何要使用命令进行关机重启? linux系统中的各个进程携带着各种数据,强制关机会照成数据混乱而丢失数据,甚至可能损坏硬件,所以我们需要更加安全的关机和重启方式 关机重启相关命令,需要root用户才能 ...
- OpenMP变量作用域【private】【shared】
(1) privateprivate子句将一个或多个变量声明为线程的私有变量.每个线程都有它自己的变量私有副本,其他线程无法访问.即使在并行区域外有同名的共享变量,共享变量在并行区域内不起任何作用,并 ...