Java方法
面向对象
1.定义
啥是面向对象?
面向:找、拿。
对象:东西。
面向对象编程:找或拿东西过来编程。
2.类
如果要用对象,必须先设计类,创建对象并使用
类(设计图):是对象共同特征的描述;
对象:是真实存在的具体实例。
结论:在Java中,必须先设计类,才能创建对象并使用。
2.1如何设计类

案例:
定义一个Car类:
1 | package com.javabean; |
测试类调用Car类
1 | package com.javabean; |
idea中的f:field(类的属性)
m:method(方法)

2.2类的补充
1.类名要大写,不能用关键字,驼峰模式,合法标识,且有意义
2.一个Java文件中可以定义多个class类,但只能有一个public类,其他的类不能加public,并且,public修饰的类必须成为代码文件名。
重要:所以实际开发还是建议一个代码文件定义一个类
3.成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;
一般无需指定初始值,存在默认值。
默认值的规则:
byte short int long : 0
double float : 0.0
Boolean : false
String : null
例子:
通常写的:String name;
实际上:String name = null;(null是系统默认的)
3.构造器(有参和无参)
3.1构造器的作用
定义在类的,可以用于初始化一个类的对象,并返回对象的地址。****说白了,可以通过它得到一个对象
- 初始化类的对象,并返回对象的地址。
Car c = new Car();
3.2构造器的使用
无参构造器,默认存在的。
有参构造器,在初始化对象的时候,同时可以接受参数为对象进行赋值。
案例:
创建一个Shop类,定义有参无参。
1 | String name; |
创建一个People类,使用Shop类
1 | public static void main(String[] args) { |
s里面new Shop里没有参数,对应无参
s1里面new Shop里有参数,对应有参
额外知识:Double 和 double
- double是基本数据类型,不是一个类;Double是原始数据类型,是一个类,Object的一个子类
- double没有方法,Double有自己的属性和方法
- double只创建引用,Double创建对象
- 集合类不能存放double,只能存放Double
- 两者存放位置不同:
- Double 整数报错,double则不会
3.3构造器的注意事项
任何类定义出来,默认就自带了无参数构造器,写不写都有。
- 但是一旦定义了有参数构造器,无参数构造器就没有了,如果还想用无参数构造器,此时就需要自己手写一个无参数构造器了。否则报错
4.this关键字
4.this关键字是什么
- 可以出现在构造器、方法中
- 代表当前对象的地址
- 在构造器无参中,已经出现了this,(虽然是自动生成的)
- this(可以理解为当前对象的成员变量,而不是形参)
1 | public Shop(String name, double price) { |
this是调用对象赋值,不加是直接复制。指定当前对象,好区分分。
5.封装
面向对象的三大特征:封装、继承、多态。
封装的原则;对象代表什么,就得封装对应的数据,并提供对应数据的行为。
比如人开车,但是“开”是定义在车的方法里,车都会被开,但是人不一定开车。人只是调用这个方法。
封装思想:可以省下很多的事,大部分常用的方法Sun公司都会提供,不用自己去写了,找到对应的方法就好了。如果实在没用,只能自己写了。
有什么事,找对象,调方法就行了。
对象代表什么,就得封装对应的数据,并提供数据对应的行为。
5.1如何更好的封装
1.一般建议使用对private(私有、隐藏)关键字修饰。(private修饰的成员只能 在当前类中进行访问)
2.为每个成员变量提供配套public修饰的getter和setter方法。
可以在setter里输入条件,满足条件
所得到的结果都要用条件满足。
输入值:fan.setAge(30);(对象名.方法名())
输出值:System.out.println(fan.getAge());
- “&&”表示 与,意为同时都要满足。“||”表示 或,意为二者或多着只要满足其中一个。
6.Java Bean
也可以称为实体类,其对象可以用于程序中封装数据。
- 用于实体类(学生类、老师类、汽车类),不是什么test类,
标准JavaBean必须满足如下要求
1.成员变量使用private修饰
2.提供成员变量对应的set/get方法,暴露其赋值(可能会觉得有set方法要校验加判断,因为数据可能不安全。但是因为数据传过来就已经是一个合法的判断。所以没必要,可以写但没必要)
3.必须提供一个无参构造器,有参构造器可写可不写。(但是写了有参,必须要写无参)
1 | private String name; |
6.1set和get
setName 和 getName只是两个标识符,代表方法。
- setName用来设置的,getName用来获取的。
getName,因为name是private不能在其他类中直接获取
你在一个类里面写的main方法,可以直接访问私有属性,要在外面创建对象,赋值后要通过get方法才能访问属性
7.补充:成员变量和局部变量
成员变量:在类中(class类),int age;默认值0。堆内存。对象创建存在
局部变量:在方法中(main),int age = 18;没有默认值要定义。栈内存。方法运行存在
局部变量的作用域在main方法的大括号里,跳出括号就没有了,成员变量则不好界定。
8.类、对象、方法
类是封装对象的属性和行为的载体,而对象的方法以成员方法的形式存在,类是构建对象的模板。
对象是类的具体实例。
人话:类是一个模版(属性和行为),比如动物类,动物有姓名,年龄。这就是属性,动物会跑会叫,这是方法(类方法),这也是它的行为。
对象是个具体的实例,比如加菲猫,姓名叫加菲猫,跑的慢。
1 | Cat 加菲猫 = new Car(); |
对象则是new这个类取的一个叫加菲猫的名称。
9.成员变量和局部变量












