类的创建:
通常我们把具有相似特性的东西划归为某一类,比如把人分为一类,因为人都有身高,体重,年龄,生日这些属性;都有吃饭,走路这些行为。每一个类都有很多个对象,并且每一个对象的属性值和行为也是不一样的。
类可以理解为一个静态的模板,对象是一个具体实现。
在java语言中,我们用class关键字来定义一个类。
Public class people{
}
1,访问修饰符为public或者缺省。public表示可以被别的对象访问。
2,类名:自己定义的标识符,用来表示这个类。
3,访问说明符有public、private、protected三种:
Public:可以省略也可以写上,为默认类型,所有的类都可以访问和使用的。
Private:私有类型只可以在本类访问使用。
Protected:受保护的,可以在本类和本类的同包子类中使用。
同样的在类中还有很多属性,
public class people{
//年龄
public int age;
//生日
public int birthday;
//名字
public String name;
}
变量:
Public static int age;为类变量(静态变量),这类变量一旦赋值它的值就在你new出来的任何一个实例中具有相同的值。
Public(private) int age;为成员变量(实例变量),每一个new出来的新实例都可以对他赋予自己需要的值。
Int i=10;为普通变量
例子:
class example{
static int a = 0;
int b = 1;
}
a是类变量,b是实例变量
example e1 = new exzample();
example e2 = new exzample();
改变e1中a的值会使e2中的a值也改变
而e1中b值的变化不会带来e2中a值的变化
}
引用传递最后的值改了,永远是改了的值,是类对象的传递
值传递是基本数据类型的传递,传递的只是值,在某一个地方传递的什么样的值,在这个地方就会打印什么样的值
定义的方法:
Public void peopleinfo(int age,String name,int birthday){
System.out.println(“我的年龄是”+this.age+“岁”+”我的名字是:”+this.name+”我的生日是:”+this.birthday);
}
类的完整代码如下:
public class people{
//年龄
public int age;
//生日
public int birthday;
//名字
public String name;
Public void peopleinfo(int age,String name,int birthday){
System.out.println(“我的年龄是”+this.age+“岁”+”我的名字是:”+this.name+”我的生日是:”+this.birthday);
}
}
类的构造方法:
构造方法是一个和类的名字一样,并且没有任何返回值,people类中默认的构造方法就是:
Public people(){
}
这个无参的构造方法是该类默认就有的,就是无论写不写都会默认有这个方法,如果写成有参的构造方法,那么无参的构造方法就会被干掉,这叫做方法的重载(这个下面会讲到,先了解一下)。
Public people(int age){
System.out.println(age);
}
Public people(int age,int birthday){
System.out.println(age+“ ”+birthday);
}
对象的创建:
定义完类之后,就可以通过这个类创建对象了,创建对象的关键字是new,用new构造方法的方式。比如Peoplepeople=new People();
这样就创建了一个对象。
我们在创建对象的时候还可以调用其他的有参构造方法:
People people1=new People(25);
这样我们就调用了上面的第一个有参的构造方法
People people1=new People(25,19901010);
调用了上面的第二个有参的构造方法
对于对象的应用:
给属性赋值的方式是:类名.属性名=值
People people=new People();
people.age=25;
people.birthday=19901010;
people.name=”小明”;
调用方法的方式是:类名.方法名(类型名 参数1,。。。)
People.peopleinfo();
方法的创建:
人都有自己的一些行为,比如吃饭,走路这些行为在java中可以表示为方法,定义方法的语法是:
方法不能写在main主函数里面
访问修饰符(public,private,protected)
static(类方法,没有static就为对象的方法)
返回类型(void,八大基本数据类型,String对象类型,其他的数据类型)
方法名称(自定义)(参数类型参数1,参数类型 参数2。。。)
无参方法
Public void play(){
System.out.println(“你好”);
}
有参方法
Public void play(int age){
System.out.println(“我的年龄是”+age+“岁”);
}
Public void play(int age,int birthday){
System.out.println(age+” ”+birthday);
}
定义一个有参的方法
Public int add(int a,int b){
Int result=a+b;
return result;
}
Public int add(int a,int b,int c){
Int result=a+b+c;
return result;
}
这两个方法的方法名相同,但是参数不同,这叫做方法的重载
Test t=new Test();
Int add_result=t.add(3,4,5);
根据参数的个数,调用了下面的方法
如果定义的方法含有static,则可以用类名直接调用,调用的方式是类名.方法名(),例如;
Public class Test{
Public static void name(){
System.out.println(“nihao”);
}
}
Test.name();
重写:是父子类之间方法名参数都相同只要重写了方法在测试类里就只会调用子类重写的方法
类的初始化:
类在加载时(第一次调用类),类的各个成员变量会进行初始化,对于引用数据类型和String的变量会默认初始化为null,对于int和long型的变量会初始化为0,
float和double型的变量会初始化为0.0。
类在加载时,除了会初始化变量,还会调用类的静态块和动态块。
静态块:
在类里面可以使用static修饰一段代码
static{
System.out.println("a");
}
static{
System.out.println("b");
}
这种代码会在类加载的时候执行,多个static语句块会从上往下顺序执行。
静态块前面必须加上static
动态块:
{System.out.println("c");
}
{System.out.println("d");
}
动态块不用任何关键字修饰,直接使用花括号包含,这种代码会在static语句块执行完之后执行,多个动态语句块会从上往下顺序执行
静态块只会在第一次加载时执行一次,动态块在每次使用此类时执行,并且在调用类的静态方法或静态变量时动态块是不会执行的。
面向对象的三大特性:
封装:把某一类具有相同属性或者实现某一些功能的装到一个类中,就和生产的相同产品装到一个箱子一样。比如一个pojo
继承:子类可以继承父类的所有方法和属性,除了构造方法以外,构造方法和类同名,每一个类都有一个构造方法,如过不写就表示默认的,为空,继承的关键字是extends。
子类可以调用父类的构造方法,用关键字super,
单根继承每一个子类只能有一个父类
多态:构造方法可以重写,但是必须在两个类中,功能类似,但是做的事情不同。重写和覆盖名字不同,意思一样。