一、类和对象
1、类
“你是哪一类人啊?”这里的类(class)是一种抽象概念,好人、坏人、男人、女人、外星人等
再比如,笔记本电脑类可以划分超薄本、全能本、游戏本、商务本等,但具体是哪个型号的电脑得指明一个对象
写程序时每次会新建一个class文件,就像c语言.c文件一样,但记得文件名大写
2、对象
对象就是类的实例化(把抽象变为具体)
eg:“你果然是吉林跑男啊!”这里的(你)不知道是谁,但是把(你)换成(赵三金)就是具体到某一个对象
//笔记本是类名,游戏本是实例化对象的名称
//等式右边new 关键字是创建对象的方法,后加()
笔记本 游戏本 = new 笔记本 ();
//Scanner这个类是从键盘里输入数据
//括号中System.in固定用法
Scanner sc=new Scanner(System.in);
二、类成员变量和方法
1、类
一个类中存在着属性和方法,属性也叫做成员变量,方法类似于C语言当中的函数
eg:人,人的属性有眼睛、鼻子、耳朵等;方法(行为)有唱跳rap、行走、跑步、吃饭睡觉等
public class Animal {
//动物名称字符串
String animalName;
//动物年龄整型
int animalAge;
//动物方法speak
void speak(){
System.out.println("我是一只动物");
}
}
2、对象调用类的属性和方法
新建一个class文件,此时实例化一个Animal类下的Cat猫对象,想让Cat调用Animal的属性和方法,只需Cat .( 属性 / 方法 )
Obj( 对象名 ).( 属性 / 方法 )
可以看到前面三栏东西都是我们自定义的,调用speak()方法后,运行结果为Animal中speak里输出的话(“我是一只动物”)
同样的,cat调用Animal的属性,说“我是一只动物,我是一只猫,今年8岁了”
public class Demo_2 {
public static void main(String[] args) {
Animal cat=new Animal();
cat.speak();
cat.animalName="猫";
cat.animalAge=8;
System.out.println("我是一只"+cat.animalName+",今年我"+cat.animalAge+"岁了!");
}
}
运行结果
3、构造方法
构造方法属于方法中一种,但其方法名与类名相同
其实当new 一个Animal()时,就是在使用构造方法,这也说明了类当中存在一个默认无参数的构造方法,只要我们对原来默认的构造方法进行重写,那么new Animal()就会报错了
Animal类:
Animal(String name,int age){
name=animalName;
age=animalAge;
}
我们会发现在主程序中报错
解决办法:
①如果就是要创建无参的对象,在Animal类中将默认无参数的再写一遍
②根据重写的构造方法,创建时给予变量
我们使用办法②,目的也就是为了在创建对象时就把这个动物的名字和年龄给它赋值
Animal cat=new Animal("猫",8);
Animal dog=new Animal("狗",10);
4、成员变量和局部变量
成员变量:类中的属性变量
局部变量:类中方法的变量
局部变量不可以被static关键字修饰
三、this关键字
1、this.变量名
在上述3、构造方法中的Animal类里,形参中age=animalAge这样写过于繁冗
于是我们可以修改为
Animal(String name,int age){
this.name=name;
this.age=age;
}
this指向当前对象中的name、age
表示为当前类的成员变量name赋值为形参中的name,age同理
2、this(参数)
调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。
四、封装
1、private关键字
面向对象三大特征:继承、封装、多态
被private修饰的字段就不能被其他人访问了,就像宿舍拉上床帘,只想美美的睡上一觉
我们发现这样写,在主程序中就无法使用这三个字段了
换言之:谁都无法访问你,那么你的存在是不是有些多余了。所以一般对封装起来的成员变量,我们会设置get和set方法(留口子),get就是可以获取到这个封装的成员变量,set就是可以修改它。
//获取动物年龄
public int getAnimalAge() {
return animalAge;
}
//设置动物年龄
public void setAnimalAge(int animalAge) {
this.animalAge = animalAge;
}
//获取动物姓名
public String getAnimalName() {
return animalName;
}
//设置动物姓名
public void setAnimalName(String animalName) {
this.animalName = animalName;
}
五、数组
1.数组初始化
和C语言中区别不大,不过[ ]方括号建议写在数组类型的后面,主程序里String[ ] args也是这样写的
//开辟十个int类型的空间,未赋值
int[] arr=new int[10];
arr[0]=1;
arr[9]=666;
//初始化赋值
int[] array={1,2,3,4,5};