目录
类的创建
class 类名{
属性(变量列表)(可有多个)
成员方法(可有多个)
}
示例
class Student{
/*属性*/
public int age;
public int grade;
public String sex;
/*成员方法*/
public void Class(){
System.out.print("我是x班的");
}
public void grade(){
System.out.print("我是个伞兵!!");
}
}
类的初始化
就地初始化
class Student{
public int age = 10;
public int grade = 20;
public String sex = "gay";
/*成员方法*/
public void Class(){
System.out.print("我是x班的");
}
public void grade(){
System.out.print("我是个伞兵!!");
}
}
默认初始化
当成员变量没有赋初值时 成员变量的值为对应零值
int是0,float是0.0不用赘述
引用类型对应的是null
boolean对应的是false
char对应的是空格
类的使用
实例化
类名 实例名 = new 类名(参数) ----->(这个参数会在构造方法中具体阐述)
例子
Student zhangsan = new Student();
Student lisi = new Student();
Student wangwu = new Student();
成员变量使用
实例名.成员变量 (然后就当做正常变量使用)
例子(一个赋值操作)
zhangsan.sex = gay;
成员方法使用
实例名.成员方法(参数) (然后就当做正常方法使用)
例子 (会输出“我是x班的”)(这里面的参数和类里面的参数一致)
zhangsan.Class();
this的使用
访问成员变量和访问成员方法
this.变量名
this.方法()
只能在类内使用,表示本类的变量名(方法)
且当参数和成员名冲突时可以区分
例: 不用this (给成员赋值)
class Student{
/*属性*/
public int age;
public int grade;
public String sex;
public void myscan(int age,int grade,String sex){
age = age;
grade = grade;
sex = sex;
}
public void myprintf(){
System.out.println(age+" "+grade+" "+sex);
}
}
public class chara {
public static void main(String[] args) {
Student st1 = new Student();
st1.myscan(18,59,"nan");
st1.myprintf();
}
输出结果为
它的输出可以看出赋值失败了 因为myscan里面的两个age grade sex相同
正确方法
class Student{
/*属性*/
public int age;
public int grade;
public String sex;
public void myscan(int age,int grade,String sex){
this.age = age;
this.grade = grade;
this.sex = sex;
}
public void myprintf(){
System.out.println(age+" "+grade+" "+sex);
}
}
public class chara {
public static void main(String[] args) {
Student st1 = new Student();
st1.myscan(18,59,"nan");
st1.myprintf();
}
}
输出结果为
那么在不冲突的时候我们一定要使用this吗?
答案是不一定,不使用也不一定会程序错误,但是用this可以提升代码可读性,并且使代码更加规范
this调用构造方法
在构造方法里面详解
构造方法
构造方法是方法的一种
1.方法名与类名必须一样
2.构造方法没有返回值 (注:定义时的返回值不能写void 而是什么都不写)
定义:public 类名(参数)
例:public Student()
相同参数数量的构造函数只能定义一个
构造方法使用方法
实例化时使用
Student zhangsan = new Student();
实例化的括号里面使用构造函数:一个类里面可以定义多个构造函数,括号里面会调用与参数数量与一致的构造函数。
如果括号里面有一个参数就调用一个参数的构造函数
如果括号里面有两个参数就调用两个参数的构造函数
例:实例化时输入一个参数
class Student{
/*属性*/
public int age;
public int grade;
public String sex;
public Student(int age){
System.out.println("一个参数的构造函数");
}
public Student(int age,int grade){
System.out.println("两个参数的构造函数");
}
}
public class chara {
public static void main(String[] args) {
Student st1 = new Student(1);
}
}
结果为:
例:实例化时输入两个参数
class Student{
/*属性*/
public int age;
public int grade;
public String sex;
public Student(int age){
System.out.println("一个参数的构造函数");
}
public Student(int age,int grade){
System.out.println("两个参数的构造函数");
}
}
public class chara {
public static void main(String[] args) {
Student st1 = new Student(1);
}
}
结果为:
this调用构造方法
在本类构造方法内部调用构造方法 this(参数)
(注意这是方法使用阶段,里面直接写参数即可)
注意点1.不能形成闭环(无限循环)
2.只能放在构造方法第一行
例:在一个构造方法内调用另一个构造函数
class Student{
/*属性*/
public int age;
public int grade;
public String sex;
public Student(int age){
this(1,2);
System.out.println("一个参数的构造函数");
}
public Student(int age,int grade){
System.out.println("两个参数的构造函数");
}
}
public class chara {
public static void main(String[] args) {
Student st1 = new Student(1);
}
}
输出结果为:
常见的错误
我们会发现如果我们不定义任何构造函数时,实例化一个类的时候用:
Student zhangsan = new Student()
程序是不会报错的,但是如果我们定义一个任何参数数量构造函数的时候,再次这么定义就会报错。
因为:在括号里面没有任何参数的时候,我们仍调用了一个空参数构造函数,当我们没有定义任何构造函数的时候,系统会自动创建一个没有参数的空构造函数,所以我们()调用空参数构造函数的时候就调用了系统自动创建的构造函数。
而当我们定义了一个构造函数的时候,系统就不会自动创建,所以当我们调用空参数构造函数的时候,会显示没有此参数数量的构造函数
当然了 如果你定义一个空参数的构造函数也不会报错。
所以总结:
1.当我们写了一个类之后,没有写构造方法的时候,编译器会帮我们默认生成一个不带参数的构造方法
2.当我们写了任何一个构造方法之后,就不再自动生成不带参数的构造方法。
3.一个类 至少会有一个构造方法,即使你没有写
有一个很重点的地方:当我们实例化一个对象的时候,一定(至少)会有两步,第一步:为对象分配内存,第二步:调用合适的构造方法