Java面向对象2(含构造器重要)
类与对象的关系:
类:描述一类具体的事物应有的特点和行为
对象:是抽象概念的具体实例
类是对象的模板,对象是具体的事物
创建与初始化对象
使用new关键字
不要在每个类中写main方法,一个项目中应只有一个main方法
类中只包含两东西:
属性:变量字段;
方法:即函数。
类需要通过创建具体的对象来实例化
public class Demo2 {
public static void main(String[] args) {
Student.say();
//类的实例化,new创建新的对象
//对象类型 对象名 对象值
Student student = new Student();
student.hi();
student.study();
}
}
类的实例化,new创建新的对象:
Student student = new Student();
Student为定义的(class)类,对象名命名为student,new Student()
使用new关键字创建的时候,除了分配内存空间外,还会给创建好的对象进行默认的初始化(属性null/0)及 对类中构造器的调用
public class Student {
//属性
String name;
int age;
//静态方法
public static void say(){
System.out.println("学生说话了");
}
//非静态方法
public void hi(){
System.out.println("打招呼");
}
public void study(){
System.out.println(name+"在学习");
}
}
//以上为类,组织程序代码
package OOP;
public class Demo2 {
public static void main(String[] args) {
Student.say();
//对象类型 对象名 对象值
Student xiaoming = new Student();
xiaoming.hi();
xiaoming.name = "王xiaoming";
xiaoming.age=20;
xiaoming.study();
Student awei = new Student();
awei.study();
awei.name = "awei";
awei.study();
}
}
//以上为形成实例对象,组织数据
输出:
学生说话了
打招呼
王xiaoming在学习
null在学习
awei在学习
面向对象的本质:以类的方式组织代码,以对象实例来组织数据。
(面向对象04)
对类中构造器的调用
使用new关键字创建的时候,除了分配内存空间外,还会给创建好的对象进行默认的初始化(属性null/0)及 对类中构造器的调用
一个类在定义时即使什么都不写,也会默认有一个构造器方法:
- 其默认与类的名字相同
- 它没有返回类型,也不能写void
- 该构造器方法可以在类的.class文件中查看到
也可以显示定义构造器:
public class Person{
String name;//自动为null,实例化初始值
public Person(){//无参构造方法
//初始化信息
this.name = "szc";//给name初始化的值
//运行完全部构造器代码后才创建成功实例对象
}
}
public class Demo05 {
public static void main(String[] args) {
Man person = new Man();
System.out.println(person.name);
}
}//输出为szc,但是在输出szc前,name先是null,之后进入构造器变为szc,这之后实例对象才生成完成
在执行完全部构造器中的代码后,才会生成实例对象
构造器作用:
-
使用new关键字时(构造器是一定有的),创建实例对象时首先进入构造器(方法/函数),且使用无参构造时可以不显示定义(即会自动默认定义),而使用有参构造时必须使用显示定义;
new的本质即调用构造器
-
初始化对象的实例属性的值
有参构造:一旦定义了有参构造,无参构造必须显示定义
public class Man {
String name;
public Man(){
this.name = "szc";
}
//有参构造
public Man(String name){
this.name = name;
}
}
public class Demo05 {
public static void main(String[] args) {
//Man person = new Man();
//System.out.println(person.name);
Man man = new Man("sss");//会自动判断,有参数时跳入有参构造的构造器
System.out.println(man.name);
}
}
//输出为sss,因为此时定义的实例对象带了参数,构造器方法重载,会自动匹配到有参构造器中
构造器快捷键:alt+insert(笔记本需要再+Fn),自动生成有参构造器,若选择下方的none,则生成无参构造器
this.属性 = 传入的参数变量;