类是同类对象的的一概括性的描述。
类是抽象的概念,是创建对象的模板。
类是一种数据类型;是开发人员为解决问题而定义的。
对象是一个你能够看得到、摸得着的具体实体
类是对象的抽象,对象是类的具体
(1)、定义类名
(2)、编写类的属性
(3)、编写类的方法
例:
public class Student{
int stuNO;//学生学号 -------属性(成员变量)
String stuName;//学生姓名
public void study(){
System.out.println("正在学习中,请勿打扰。。。。");
}
public void play(){
System.out.println("正在玩耍中,看我操作!!!!");
}
}
(1)、创建对象使用new关键字调用类的构造方法
Student student = new Student();
(2)、使用反射创建对象
<1>Class.forName("com.example.Student"),参数为类的全限定路径。
<2>Student.class(),使用类的class方法获取一个实例。
<3>使用具体对象的getClass()方法获取实例。
(1)、什么是构造方法
构造方法负责对象属性进行初始化工作,为实例变量赋予合适的初始值,用来描述对象的创建过程。每个类都有一个构造方法,如果认为定义构造方法,那么类就会有显式的构造方法,如果未定义构造方法,那么类会默认一个无参数的构造方法。
(2)、构造方法必须满足以下语法规则
<1>构造方法名必须与类名相同
<2>没有任何的返回类型,连void也不返回
注: 构造方法是由JVM调用使用的
(3)、带参数的构造方法
•通过带参数的构造方法,显式地为实例变量赋予初始值
•可以给一个类添加多个版本的构造函数,每个版本的构造函数必须要参数的个数不同或参数的类型不同
•构造方法除了给属性赋值还可根据需要写其它代码,一个构造方法内也可以调用另一个构造方法
this理解为当前对象的另一个名字,代表对当前对象的一个引用。
注:this是不能在static修饰的方法中使用
this()调用其他构造方法必须是第一句
public class Teacher{
public Teacher(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
}
public Teacher(int i,string n ,string s){
this(s,n,i);
}
}
public class Student{
int stuNO;//学生学号 -------属性(成员变量)
String stuName;//学生姓名
{
System.out.println("普通代码块。。。。");
}
static {
System.out.println("静态代码块。。。。");
}
public void study(){ //普通方法
System.out.println("正在学习中,请勿打扰。。。。");
}
public static void play(){ //静态方法
System.out.println("正在玩耍中,看我操作!!!!");
}
}
2.静态代码块和动态代码块的区别:
(1)静态代码块有static关键字,而动态代码块没有
(2)执行顺序 类在初始化时就会执行静态代码块,动态代码块在对象创建的时候才会执行,且位置靠上的先执行。
(3)当使用类创建多个对象时,静态代码块只会被执行一次,而动态代码块会在每次创建对象都会被执行一次
3.静态方法和普通方法的区别:
(1)调用方式
静态方法:可以通过类名直接调用,也可以通过对象名调用。例如:ClassName.methodName()
或 object.methodName()。
普通方法:必须通过对象引用调用。例如:object.methodName()
(2)内存分配
静态方法:在类加载时分配内存,属于类级别。静态方法和静态成员变量在类加载时被分配内存。
普通方法:在每次创建对象时分配内存,属于对象级别。
(3)访问权限
静态方法:只能访问静态成员变量和其他静态方法,不能访问非静态成员变量和非静态方法。
普通方法:可以访问所有成员变量和方法,包括静态和非静态的。
(4)重写和隐藏行为
静态方法:由于静态方法属于类级别,不能被重写(override)。尝试在子类中重写父类的静态方法会导致编译错误。
普通方法:可以被重写(override)和重载(overload)在子类中重新定义与父类中同名同参数表的方法。
同一个类中,有两个或两个以上的方法,它们方法名相同,参数列表不同,在这种情况下,该方法就被称为重载(overload)。其中参数列表不同包括以下三种情形:
–参数的数量不同
–参数的类型不同(注意有些类型可以自动转换)
–参数的顺序不同
public class Student{
public void study(int i , double d){
System.out.println("正在学习中,请勿打扰。。。。");
}
public void study(double d, int i){
System.out.println("正在玩耍中,看我操作!!!!");
}
//study(3,3.5);不会报错,因为double不能自动转化为int,所以会调用 study(double d, int i)这个方法
//study(3,3);//报错,不知道调用那个study(),int会自动转化为double。
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。