前言
这篇文章,我们详细了解在Java中的类和对象,Java是一种面向对象的语言,在Java中,一切都是对象,下面我们开始了解类和对象,以及相关的拓展
一.面向对象,和面向过程的区别
面向过程就是面对事件(简单的问题),进行分析并通过结局人步骤一步一步的解决问题,就是代码短小精悍
面向对象就是以对象为中心(一般是复杂的问题),化为小问题,小问题就是对象,描述所有对象的行为和属性,就是结构化,模块化
其实两种思想,不同的需求就用不同的方法和设计模式就行。
二. 类和对象
- 类:类是对象的模板,(类)模板里面 描述对象的 状态(属性),行为;
- 对象: (不是男女朋友!)对象是类的一个实例,所以对象 有 状态(属性),行为。 例如:一个类是描述 狗 的模板,这个类中,可以有多个对象,也就是有多条 狗;且这不同的狗,毛色,品质,行为也就不同,
注意:“多条狗”是因为, 一个类可以同过 new 实例化多个对象,
1. 类中的变量有以下几种:
- 局部变量:变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和 特定类的语句块访问。
2. 而成员变量可以分为两种:普通成员变量,静态成员变量
静态成员变量:由static 修饰,不属于某个具体的对象,是所有对象所共享的,
既可以通过方法访问,也可以通过类名访问;建议用类名
生命周期 伴随类的一生
在类中,有多个方法,在方法内: 是局部变量;
方法外:是全局变量;全局变量有一个是static类型的
1.1 类的定义格式
在Java中定义类需要关键字 class,如下
//创建类
class car{//主体
/*属性,字段,成员变量:
成员变量:
1.普通成员变量
2.静态成员变量 注意:成员前写法统一为 public
*/
field
/*成员方法 : -------》主要说明类具有那些功能
1.普通成员方法
2.静态成员方法
*/
method
}
1.1.1 class car
注意:一般一个Java文件只定义一个类,方便管理
定义一个类 :car //一个类对应生成一个字节码文件
public class car { public String name ; //名字 public String color; //颜色 public void carMove(){ System.out.println( color+"的"+name+"向由开了"); }//一个类(src中)对应生成一个字节码文件(out中) 如下
如果想更改public修饰的类的名称,需要通过开发工具进行修改(不要重命名)
三.类的实例化
我们定义的类型是自定义类型,与int, double 类似,但是int 等是Java语言中内置的类型。通过new实例化对象
new实例化出来的就是一个正真实体
1.1实例化例子,
public String name ; //名字 public String color; //颜色 public void carMove(){ System.out.println( color+"的"+name+"向由开了"); } public static void main(String[] args) { car111 car111 = new car111(); car111.carMove();
public String name ; //名字 public String color; //颜色 public void carMove(){ System.out.println( color+"的"+name+"向由开了"); } public static void main(String[] args) { car111 car111 = new car111(); car111.color="红色"; car111.name="大众"; car111.carMove();
1.2 this的用法
1.2.1 为什么要有this引用
1.例如下面:time 类 //this代表当前对象的引用
public class Time { public int year ; public int month; public int day; public void setDate (int i, int d, int f){ year = i; month = d; day = f; } }
两中写法都行,建议加this的
2。 还有有一个点,为什么写this
public class Time { public int year ; public int month; public int day; public void setDate (int year, int month, int day){ this.year = year; this.month = month; this.day = day; } public void print(){ System.out.println(year+" "+month+" "+day); } public static void main(String[] args) { Time time1 =new Time(); time1.setDate(1999,2,11); time1.print(); Time time2 =new Time(); time2.setDate(1232,4,12); time2.print(); } }
这里如果没有加this,是形参给自己赋值,并没有影响实参,,this的话,就是当前谁调用方法,
3. this还可以在成员方法中调用其他成员方法
四. 如何初始化对象
1.就地初始化
在特殊情况下,比如任何一次对象的实例化之后,都期望名字是默认的
public class car111 { public String name =" 哈哈"; //名字 public String color; //颜色
当然,实例化之后,可以进行更改
2.局部初始化
局部变量 在使用的之前,需初始化,
在没有初始化的时候,都会有个默认值
int 的为0; double的为0.0; float 的为 0.0f; 引用类型的化为null。
五.构造方法****
特性:
- 没有返回值
- 方法名与类名一样
例如:
public class Test { public int age; public String name; public Test(){ this.age=10; this.name="nana"; System.out.println("daadada"); } public static void main(String[] args) { Test test = new Test(); } }
不带参数的构造方法,
注意:
- 对象的产生,换句话说:实例化一个对象,至少有2步是很关键的;1:为对象分配内存 2: 调用合适的构造方法
- 如果没写任何一个构造方法,Java会给提供一个不带参数的构造方法
* 调用合适的构造方法,所以不只一个构造方法 *
所以这里,就有重载的现象,构造方法可以重载,如下
public Test(){ this.age=10; this.name="nana"; System.out.println("daadada"); } public Test(int i,String ada){ this.age=i; this.name=ada; System.out.println("daadada"); }