一、面向对象概述

1.面向过程:

分析解决问题的所需要的步骤,然后我们用函数来一步一步的调用实现。
例子1.把大象放进冰箱
1.打开冰箱
2.放入大象
3.关闭冰箱

例子2.做五子棋的游戏开发
1.开始
2.白子先走
3.绘制棋盘
4.判断输赢
5.黑子再走
6.绘制棋盘
7.判断输赢
……

2.面向对象

OOP(Object Oriented Programming)面向对象编程
面向对象的思想是抽取一类具有相同属性行为的事物。
冰箱:打开门,关闭门
大象:走路
棋子:走,黑子和白子
棋盘:绘制
规则:判定输赢

java是属于面向对象语言
面向对象4大特性:抽象、封装、继承、多态
核心概念:万物皆对象

二、类

※我们把某些具有相同的属性和行为的事物抽象成一个类。
狗:
属性:颜色,眼睛,耳朵,重量,
行为:看家,睡觉,吃饭

车:
属性:颜色,四个轮子,方向盘
行为:跑,刹车
类就是一个概念

※对象是一个具体的实物,如:京巴。

※类其实类似于一个模板的东西,对象(实例)是根据这个模板所产生的样本。
类:概念,是抽象的
对象:具体的。
如果不理解的话我再举一个例子:例如有一个制作饼干的模具(类),我们可以根据这个模具生产各式各样的饼干(对象)
语法:
class 类名{
属性
行为
}

※类名首字母要大写,如果类名是多个单词构成,那么每一个单词首字母都要大写 XxxYyyZzz

※属性(成员变量)的定义:
数据类型 属性名 [= 初始值];
中括号里面的可以没有,属性可以没有初始值。
※行为(方法):
具体语法:
public [static] 返回值类型[void] 方法名(数据类型 参数名,…){

[return 数据]

}

注意:类是一个概念,不能直接使用,必须使用这个类的具体的对象。根据类来创建对象
具体语法:
类名 变量名 = new 类名();

一个文件中可以写多个类。
如何给一个具体的对象来赋值属性呢:
对象的变量.属性名 = 具体值;
调用方法:
对象的变量.方法名([实际参数1],[实际参数2]…)

代码清单:

class Dog{/*** 属性*///姓名String name;//颜色  String color;//身高double height;//体重double weight;/*** 行为*/ public void protectHome(){System.out.println(name+"在看家");}public void sleep(){System.out.println(name+"在睡觉");}
}class TestDog{public static void main(String[] args){//创建对象(实例)语法:类名 变量名 = new 类名();Dog dog = new Dog();//赋值的方法  变量名.类属性名  = dog.name = "栗子黄";dog.color = "黄色";dog.height = 2.0;dog.weight = 13.0;//变量名.类属性名System.out.println("狗的颜色:"+dog.color);System.out.println("狗的身高:"+dog.height);System.out.println("狗的体重:"+dog.weight);System.out.println("---------dog1的第一次打印----------------------");Dog dog1 = new Dog();dog1.name = "小黑";dog1.color = "黑色";dog1.height = 3.0;dog1.weight = 10.0;System.out.println("狗的颜色:"+dog1.color);System.out.println("狗的身高:"+dog1.height);System.out.println("狗的体重:"+dog1.weight);System.out.println("-----------dog2的第一次打印--------------------");//把dog1的属性赋给了dog2Dog dog2 = dog1;dog2.color = "白色";System.out.println("狗的颜色:"+dog2.color);System.out.println("狗的身高:"+dog2.height);System.out.println("狗的体重:"+dog2.weight);System.out.println("---------dog1的第二次打印----------------------");System.out.println("狗的颜色:"+dog1.color);System.out.println("狗的身高:"+dog1.height);System.out.println("狗的体重:"+dog1.weight);//类的对象的方法//变量名.方法名([参数]);dog.protectHome();dog1.protectHome();dog2.protectHome();dog.sleep();}
}

成员变量和局部变量

※局部变量:
1.定义位置:在方法中(包括参数列表)、在各种语句块中(for循环、try…catch…finally代码块儿、静态代码块儿、对象代码块儿等等)
2.使用方式:局部变量必须赋初始值才能用;
4.生命周期:定义的时候产生,当前的方法的括号语句块的括号执行完毕就会消失。
※成员变量(属性):
1.定义位置:类的直接下级
2.使用方式:可以不赋值,如果不赋值都有默认值。
3.存储位置:存储在堆中
4.生命周期:随着对象的消失而消失,会被jvm的垃圾回收器来回收掉

匿名对象

没有引用变量来引用它

代码清单

class Cat{//姓名String name;//颜色String color;
}
class TestCat{public static void main(String[] args){//创建匿名对象new Cat().name = "咪咪";new Cat().color = "白色";}
}

匿名对象是毫无意义的,因为栈中没有变量对它做引用,很快就会被垃圾收集器回收掉,在实际开发中应建议避免使用匿名对象。

this关键字

代表的是当前对象

特点:
※this只能在类的对象方法和构造器中使用;
※this代表当前调用这个this所在的方法的对象的自身(谁调用的this所在的方法,this就是谁);
※this可以在方法内区分同名的类的属性和参数名,有this的一定是属性,没有this的一定是方法的参数名;
※this关键字可以调用本类中的构造器;
※this可以调用本类的方法和属性;
※this要放在构造器的第一行。

代码清单:

class Car{String name;String color;  public void run(){//System.out.println("车在跑");System.out.println(this.color);}public void intrduce(){System.out.println("我是"+this.name+"   颜色是:"+this.color);}
}class TestCar{public static void main(String[] args){Car car = new Car();car.name = "大黄蜂";car.color = "黄色";System.out.println(car);//和System.out.println(this) 打印的地址是一样的car.run();car.intrduce();}
}

构造器

构造器的语法:
public 类名([数据类型1 参数名1,数据类型2 参数名2….]){

}
目的:创建对象
构造器的特点:
※可以定义0个、1个或者N个构造器;
※无参构造器是默认构造器;
※方法名和类名一致;
※方法没有返回值且没有void;
※构造方法的形参可有可无;
※如果类中没有显示的定义构造器,默认构造器是隐式存在的;如果类中定义了有参构造器则无参构造器就会被覆盖掉,如果想要继续使用无参构造器必须要显示的定义;
※在构造器中通过this([参数])可以来调用其他的构造器,而且this必须放在方法的第一行.
※如果类中没有带有参数的构造器,就可以使用一个隐藏的默认构造器来创建对象,如果一旦有带有参数的构造器,默认的构造器就会被覆盖。我们可以显式的定义出来默认构造器就可以使用了。

代码清单

/*** 构造器的使用*/
class Persion{String name;int age; char gender;public void intrduce(){System.out.println("姓名"+name+"   性别"+gender+"年龄"+age);}//默认构造器 public Persion(){}//构造器的创建 语法:public 类名([数据类型 参数名])  public Persion(String name){System.out.println("一个人被创建");this.name = name;}public Persion(String name,int age){//调用一个参数本类的构造器this(name);System.out.println("一个人被创建");this.age = age;}public Persion(String name,int age,char gender){//调用两个参数的构造器this(name,age);System.out.println("一个人被创建");this.gender = gender;}
}class TestPersion{public static void main(String[] args){Persion p = new Persion("张三"); System.out.println(p.name);System.out.println(p.age);System.out.println(p.gender);System.out.println("-----------------");Persion p1 = new Persion("李四",20);System.out.println(p1.name);System.out.println(p1.age);System.out.println(p1.gender);System.out.println("-----------------");Persion p2 = new Persion("王五",23,'男');System.out.println(p2.name);System.out.println(p2.age);System.out.println(p2.gender);System.out.println("-----------------");Persion p3 = new Persion();System.out.println(p3.name);System.out.println(p3.age);System.out.println(p3.gender);}    }

static关键字

可以修饰在属性、方法和代码块儿上
1、修饰在属性上
(1)定义类属性:
※static 数据类型 变量名;
※使用static修饰的属性我们认为是类的属性,不带static修饰的属性我们认为是对象的属性;
※静态属性的特点:该类的所有实例可以都共享这个属性。

(2)类属性访问:
类名.类属性名(推荐使用)
对象名.类属性名

(3)类属性和成员属性的区别:
※生命周期:
创建对象的时候初始化对象属性(没有类属性早),当前对象变成匿名对象时,jvm会回收该垃圾对象,对象属性随之消失。
当.class文件被载入内存时static属性就初始化了,jvm关闭,static属性就消失。
※内存结构不同:
static属性存在方法区中(jdk1.8以后叫元数据区);
成员属性存在堆内存中。

代码清单

class User{String username;  int password;//类属性的创建 语法:static 数据类型 变量名static int  userCount;public void sign(){System.out.println("用户名:"+username+"    密码"+password);}
}class TestUser{public static void main(String[] args){//创建一个类的对象User user = new User();//类属性的调用1  类名.变量名User.userCount++;//再次创建类的对象User user1 = new User();User.userCount++;User user2 = new User();//类属性的调用2  对象名.变量名user.userCount++;System.out.println("用户的数量:"+User.userCount);}
}

2.修饰在方法上
(1)语法:
public static 返回值类型[void] 方法名(数据类型 参数名,….){

方法体
return 结果;

}
(2)类方法的调用
类名.类方法名(推荐使用)
对象.类方法名(不建议使用)
(3)类方法特点
※类方法中不能直接使用对象的属性;
※类方法只能使用类属性;
※类方法中不能存在this关键字;
※对象方法可以调用类方法,反过来不可以。

代码清单:

class Teacher{String name;int age;String lession;static int teacherCount;/*** 对象的方法,每一个老师的实例可以使用*/public void teach(){System.out.println(this.name+"老师在教课");}/** 类方法*/public static void sleep(){System.out.println(teacherCount+"老师在睡觉");}}class TestTeacher{public static void main(String[] args){/*//使用类名来调用类方法Teacher.sleep();//使用对象来调用类方法Teacher t = new Teacher();t.sleep();*/Teacher t = new Teacher();t.name = "任亮";//t.teach();t.sleep();}}

java基础之---面向对象相关推荐

  1. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  2. Java基础之面向对象的概念 继承---组合----枚举类

    Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...

  3. Java基础篇--面向对象(Object Oriented)

    Java基础篇--面向对象(Object Oriented) 1. 面向对象概念 1.1 什么事面向对象 1.2 理解面向对象 1.3 面向对象的特点 1.4 面向对象开发设计特征 2. 类与对象 2 ...

  4. 【Java基础】面向对象(三)

    [Java基础]面向对象(三) 一.多态 概念 引用类型转换 二.Object类 概述 常用方法 三.抽象类 抽象类与抽象方法的定义 注意事项 四.接口 概述 接口定义 含有抽象方法 含有默认方法和静 ...

  5. JAVA基础学习--面向对象

    JAVA基础学习–面向对象 1.面向对象与面向过程: 面向过程:就代表从头到位,每一步都需要我们来完成,例如洗衣服,首先收拾脏衣服.接上水.到洗衣液.搓.倒水.拧干.晾晒.每一步都需要我们来完成. 面 ...

  6. 一文带你深入理解【Java基础】· 面向对象编程(下)②代码块、final和abstract

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  7. java基础(一)-面向对象思想

    前言 java是一门面向对象的语言,在学习java前,先要理解面向对象这个概念,区别于c这类的面向过程语言,面向对象有着什么一样的特点呢?先上一张思维导图吧: 对象 什么是对象 问题空间中的元素及其在 ...

  8. JAVA基础:面向对象的例外处理

    为初学者而著! Java基础是初学者的起点,是帮助你从小白入门到精通必学基础课程! B站最新录制Java300集>>>   适合准备入行开发的零基础员学习Java,基于最新JDK13 ...

  9. Java基础(08) 面向对象

    Java基础(八)-- 面向对象 ​ 面向对象(Object Oriented Programming, 简称OOP )是Java基础学习的重点,必须掌握每个细节,接下来对面向对象的学习主要围绕以下三 ...

  10. JAVA基础语法——面向对象思想

    Java基础语法 前言 一.面向对象思想 1.面向对象(OOP)概述 2.面向对象三大特性五大原则 二.类和对象 1.对象和类的概念 2.对象的特征 3.构造方法 3.This关键字 4.static ...

最新文章

  1. python 图像压缩后前端解压_Python在后台自动解压各种压缩文件的实现方法
  2. (C++)用upper_bound函数取代自己写的二分查找
  3. Java基础学习总结(31)——Java思维导图
  4. python边缘检测
  5. 推荐系统笔记(内容推荐)
  6. 使用IDEA运行Spark程序
  7. android多个水波球,android球形水波百分比控件代码
  8. iphone降级 无需电脑_App 降级无需电脑,手机直接搞
  9. Silverlig“.NET研究”ht性能优化纪要
  10. php求add函数,PHP函数每日一贴之字符串函数-addcslashes()函数
  11. EXcel 2016高级VBA编程下载
  12. visual foxpro c语言教程,VFP简单初级入门教程超好.pdf
  13. Mac版pages快捷键大全
  14. 朝代官制,6部是什么
  15. [Tushare] 通过复权因子计算前复权价格、后复权价格
  16. 寒江独钓:键盘的过滤 学习笔记
  17. 服务器winsxs文件夹怎么清理工具,win10系统winsxs文件夹该如何删除?win10删除winsxs文件夹的两种方法...
  18. jQuery 从零开始学习 (三) 属性与css样式
  19. docker tomcat 的起动与访问
  20. [PLC]ST语言一:LD_LDI_AND_ANI_OR_ORI

热门文章

  1. 保险IT业从核心系统开发向服务转型
  2. set_difference函数
  3. 个人飞行器“iFLY”诞生,改变出行方式,人人都能飞?
  4. 不同数据库中获得表名列表的SQL(继续偷冰血)
  5. 算法设计与分析股民解套问题
  6. 计算100以内的质数或合数
  7. 手机短信中特殊字符导致链接失效的问题修复
  8. 0基础学数据分析 好用到爆的手机软件
  9. Python获取并输出当前日期当前时间
  10. 作为工程师,真的应当打破扫地僧情结吗?