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 ...
随机推荐
- 初等函数——指数函数(Exponential Function)
一般地,函数叫做指数函数,其中x是自变量,函数的定义域是R.
- grpc服务如何添加sentry监控(添加中间件)
目录 需求 解决 需求 sentry是一款非常好用的工具,可以方便追踪线上的异常,在gin框架里边可以非常方便的使用Use添加中件间,grpc服务在网上搜索了一堆没一个能用的,只能硬着头皮看源码 终于 ...
- 软件工程与UML作业1
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...
- hystrix熔断器之metrics
Metric概述 HystrixCommands和HystrixObservableCommands执行过程中,会产生执行的数据,这些数据对于观察调用的性能表现非常有用. 命令产生数据后,Metric ...
- ThreadLocal 和神奇的数字 0x61c88647
这篇文章会详细阐述ThreadLocal的内部结构及其原理,以及神奇的0x61c88647 在Java 1.4之前,ThreadLocals会产生线程间的竞争,无法写出高性能的代码. Java 1.5 ...
- 关于window服务器中新建的普通用户无法登录远程桌面
今天在公司服务器中为客户创建了一个普通用户 user5201351 并设置好了密码, 发给客户后,反映使用我们创建的用户不能通过远程桌面进行登录 查询资料后才知道,在windows中,需要将用户加入 ...
- Spring学习(三)Spring AOP 简介
一.简介 定义 aop就是面向切面编程,在数据库事务中切面编程被广泛使用. 在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能. 核心业务:比如登陆,增加数据,删除数据都叫核心业务 周边功能 ...
- zico2靶机渗透
zico2靶机渗透 开放了四个端口,分别是22,80,111以及57781端口. 扫到了目录http://192.168.114.152/dbadmin/ 进入看到php文件,访问,发现一个登录窗口. ...
- 微信小程序 A~Z城市选择器js文件
微信小程序城市选择 [a~z] 的所有城市选择 city.js a~z排序的城市数据 addressChoose.js 其他js文件可引用 city.js /** * Created by yvded ...
- HTML+CSS系列:登录界面实现
一.效果 二.具体实现 1.index.html <!DOCTYPE html> <html> <head> <meta charset="utf- ...