一、Java面向对象
java是一个面向对象语言,有句话说:“java一切皆对象”。
我们运行代码,需要建立一个类,类里面定义一个main函数,才能运行;
我们用到的Scanner和Random需要用到java里面写好的类,这操作也叫导包。
因为有各种各样写好的、性能优越的类存在,使得java使用起来更加轻松,大多时候我们并非学习java的语法,而是学习该如何使用这个类,这时候jdk的api(查看各种库的方法的作用)就显得比较重要了,可以自己进行下载,作为一个编程必备的软件
1.1何为面向对象
由属性和方法构成的类为对象,即类就是对象
在生活中的对象
现实中的对象多数来自于“模板”,程序中的对象也应该具有“模板”。
汽车为模板的时候叫对象,根据模板实现出来的一辆汽车叫实例化
二、对象定义与创建
2.1定义
//类名开头需要大写
public class 类名{
类属性 – 特征
类方法 – 行为
//类方法: public 属性 名字(参数){ //如 public int Num(int i){return 1};
}
public class Dog { //类名要大写
String bread;
int age;
String sex;
String furColor;
public void information(){
System.out.println(bread + "今年"+age+"岁,"+"性别为" + sex+",毛色为"+furColor);
}
public void eat(){
System.out.println(bread + "eating...");
}
public void sleep(){
System.out.println(bread+ "sleeping...");
}
}
2.2创建
类名 名字 = new 类名()
new就是让计算机知道,给后面的类(写在new后面的类名)开辟一个空间,如果有多个new,那么他们就开辟多个空间,他们不相干
public class Demo01 {
public static void main(String[] args) {
Dog dog1 = new Dog();
Dog dog2 = new Dog();
Dog dog3 = new Dog();
}
}
//我们开辟了三个属于Dog的空间,也就是实现了三个Dog,他们间是不相干的
2.2.1实例化Dog
上面的也是实例化,但只里面的属性并没有赋值和方法调用,下面认真实例化一遍
public class DogText {
public static void main(String[] args) {
//实例化Dog,赋值给dog
Dog dog = new Dog();
//dog属性赋值
dog.bread = "泰迪"; //品种
dog.age = 8;
dog.sex = "公";
dog.furColor = "棕色";
//dog方法调用
dog.information();
dog.eat();
dog.sleep();
System.out.println("--------------------------------------");
//实例化另一个Dog,赋值给dog2
Dog dog2 = new Dog();// The value of the local variable dog2 is not used
//dog2赋值
dog2.breed = "哈士奇";
dog2.age = 2;
dog2.sex = "母";
dog2.furColor = "灰白";
//dog2方法调用
dog2.information();
dog2.eat();
dog2.sleep();
}
}
结果:
泰迪今年8岁,性别为公,毛色为棕色
泰迪eating...
泰迪sleeping...
---------------
哈士奇今年2岁,性别为母,毛色为灰白
哈士奇eating...
哈士奇sleeping...
三、构造方法(重点)
构造方法,是当类实例化之后即立马执行的
上面的例子中,如果一个个赋值是非常麻烦的,但如果在实例化对象时候就把值传入进去,那么就方便得多了
构造方法:
类名(){代码块}
public class Dog {
String bread;
int age;
String sex;
String furColor;
public Dog(String bread, int age, String sex, String furColor) {
this.bread = bread;
this.age = age;
this.sex = sex;
this.furColor = furColor;
}
public void information(){
System.out.println(bread + "今年"+age+"岁,"+"性别为" + sex+",毛色为"+furColor);
}
public void eat(){
System.out.println(bread + "eating...");
}
public void sleep(){
System.out.println(bread+ "sleeping...");
}
}
在上面构造函数中,this.属性指的是本类的属性,因为传入的参数名字和类里面的属性名字相同了,如果不加this将不会赋值(可以自己尝试一下)
调用
public class Demo02 {
public static void main(String[] args) {
Dog dog = new Dog("泰迪", 18, "公", "红色");
dog.information();
dog.sleep();
dog.eat();
}
}
结果:
泰迪今年18岁,性别为公,毛色为红色
泰迪sleeping...
泰迪eating...
构造方法既然是方法,那它也是遵循方法重载的定理的。
在一般时候,如果写了一个有参的构造方法,那无参的构造方法最好写上,不然有些情况会报错。