类与对象的关系
-
类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。
-
动物,植物,手机,电脑...
-
Person类,Pet类,Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为
-
-
对象是抽象概念的具体实例
-
张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例
-
能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念
-
package com.oop.demo02; //学生类 public class Student {//一个类中只存在属性与方法 //属性:字段 String name;//默认为null int age;//默认为0 //方法 public void study(){ System.out.println(this.name+"学生在学习");//this代表的是当前这个类可以通过Ctrl+鼠标左击来查看name指的是哪个 } }
首先这是定义的一个类简述了定义类的方法格式以及类里面的格式即:任何一个类中最多只能存在属性与方法。
package com.oop.demo02; //应用类:规定一个项目应该只存在一个main方法 public class Application { public static void main(String[] args) { //类:抽象的,需要实例化 //类实例化后会返回一个自己的对象! //student对象就是Student类的具体实例! //Student student = new Student(); Student xiaoming = new Student(); Student xh = new Student(); xiaoming.name="小明"; xiaoming.age=3; System.out.println(xiaoming.name); System.out.println(xiaoming.age); xh.name="小红"; xh.age=3; System.out.println(xh.name); System.out.println(xh.age); } }
对于类仅为一个抽象的数据类型,要想实际调用还必须得new一个实例对象而对于实例对象它的调用一般都是通过调用它的地址来实现的,但是当new了多个实例变量时候多个实例变量之间就相当于同一类型的变量。故而对弈同一个类可以new建立多个实例对象。规范代码形式:自己写的代码中对于建立的不同的多个Java类最好只写一个main()方法,而对于其它的类通过new对象再调用即可。
创建和初始化对象
-
使用new关键字创建对象
-
使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
-
类中的构造器也成为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点
-
必须和类的名字相同
-
必须没有返回类型,也不能写void
-
-
构造器必须要掌握
package com.oop.demo02; //此时为Java文件编译之后成为-->class文件 public class Person { //一个类即使什么都都不写也会存在一个方法(构造器)可以通过class文件查看 //也可以直接通过显示构造 String name; int age; //构造器可以实例化一些初始值 //构造器的作用:1使用new关键字时必须要有构造器,本质是在调用构造器 //2.用来初始化值 public Person(){//无参构造器 this.name="qinjiang"; } //对于new时候如果加上参数就将直接走有参构造器来构造(相当于之前讲的方法重载) //有参构造:一旦定义了有参构造,无参构造必须显示定义否则就将无效new时候就将报错 public Person(String name){ this.name=name;//name表示传递下来的参数此时应为值调用而this.name代表对象本身的name } //Alt+insert快捷键用于生成有参和无参数构造器 public Person(String name1,int age) {//此时参数名为形参是任意的不必一定为name this.age = age; } }
package com.oop.demo02; //应用类:规定一个项目应该只存在一个main方法 public class Application { public static void main(String[] args) { //使用new关键词实例化了一个对象 Person person = new Person("kuangshen"); System.out.println(person.name);//qinjiang } }
对于一个类即使是个空类其内也隐含着一个构造器(名字与类名相同且没有返回值void也不行此时隐式的构造器是无参的),至于如何查看此构造器的方法(1打开project struct 2选择Modules 3点击Add content root选择对应文件的out文件4点击apply并OK就会在左侧上方显示出对应的class文件)点击其对应的class文件就可以查看对应的构造器。
构造器本身实际上是个方法,当new调用建立一个对象时候会调用该构造器方法new本质上也是调用构造器方法,若为空构造器则作用为初始化值。而对于new时候如果构造器方法加上参数就将直接走有参构造器来构造(例如:Person person = new Person("kuangshen");)(相当于之前讲的方法重载)对于对于同一方法名使用的实参类型不同调用的重载方法也不同,通过对于有参构造器的调用可以对于类的一些属性定值而非默认值,例如public Person(String name){this.name="qinjiang";}这个有参构造器的作用就相当于对于由类Person建立的所有对象的name属性在new建立的时候其初始值均为qinjiang而非null.而当类中存在有参构造器时,对于无参构造器必须手写出来,隐式表达式将不再存在,如果仍旧按照原来的隐式调用来new对象将会报错。而对于其中自己输入的参数的名字由于为形参所以名字任意均可。
构建构造器的快捷键:Alt+Insert,点击Constructor打开页面选择类的参数来构建相应的有参构造器,也可以按住Shift来多选参数构造多个参数的有参构造器,若要构造无参构造器点击Select none即可。