java的核心思想就是OOP
面向过程&面向对象
面向过程思想:
步骤清晰简单,第一步做什么,第二步做什么…面向过程适合处理一些较为简单的问题面向对象思想:
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后才对某个分类下的细节进行面向过程的思索面向对象适合处理复杂的问题,适合处理需要多人协作的问题对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
面向对象编程(Object-Oriented Programming,OOP)
面向对象编程的本质就是:以类的方式组织代码,以对象的形式组织(封装)数据
三大特性:封装、继承、多态
java中一共有三大变量:局部变量、实例变量(对象级别)、静态变量(类级别)
局部变量存储在栈(stack)
实例变量存储在堆内存
静态变量存储在方法区
类是一种抽象的数据类型,它是对某一类事物的整体描述/定义,但是并不能代表某一个具体的事物
动物、植物、手机、电脑…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; }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语句; } //只要是构造方法执行,必然在构造方法执行之前,自动执行“实例语句块”中的代码一个对象一个this,this存储在堆内存当中对象的内部
this是一个变量,一个引用,this保存当前对象的内存地址,指向自身
this不能使用在静态方法中,this只能使用在实例方法中,谁调用这个实例方法,this就是谁,所以this代表的是:当前对象
大部分情况下this可以省略