一.类的概念
1.1 类是什么?
a.类是对大量对象共性的抽象
b.类是客观事物在人脑中的主观反映
c.类是创建对象的模板
1.2 类由两部分组成(属性和行为)
属性和行为:例如学生类,凡是学生,都有学号、姓名、班级等,这些都是描述学生特征的,称为学生类的属性;凡是学生,都有回答问题、做实验等行为
定义一个类的语法:
[修饰符] class 类名{
//变量
//方法
}
举例:
public class Test{
int name;
public static void eat(){
}
}
学生:
属性: 姓名 、 性别 、年龄 、国籍
当一个类中有个变量 被这个类所有的对象都共享时 就用static
static:
随着类的加载而存在
先与对象而存在
被类中所有的对象共享(如果某个数据被所有对象所共享 就 用static)
直接可以使用: 类名.属性进行调用
static修饰的变量叫类成员
变量用static修饰:
[修饰符] static 数据类型 变量名
static String country;
方法用static修饰:
[修饰符] static 返回值类型 方法名([参数类型 参数名,…])
public static void study(){}
没有static修饰的叫实例成员
变量非static修饰:
[修饰符] 数据类型 变量名
String country;
方法非static修饰:
[修饰符] 返回值类型 方法名([参数类型 参数名,…])
public void study(){}
类成员和 实例成员区别:
1:所属不同: 用static修饰的成员 是属于类的
没有用static修饰的是属于对象
2:内存不同: 类成员 存在方法区的静态区
实例成员存在 堆中
3:生命周期: 类成员随着类的加载二存在
实例成员随着对象的创建二存在
4:调用不同:类成员 可以对象名.方法名 或 对象名.变量名 / 类名.方法名() 或 类名.属性名
实例成员 只能 对象名.方法名 或 对象名.变量名
注意:
1: 用static修饰的成员不能使用this
static修饰的是属于类 而this是属于对象的
类先于对象二存在
2:static修饰是的方法不能使用 非static修饰的成员变量(创建对后才会存在)
非static修饰是的方法,可以调用 static修饰的方法
成员方法(实例方法):
能调用没有用static修饰的 变量 和 方法
能 调用用static修饰的成员变量 和 方法
类方法:
只能调用static修饰的变量 和 方法
二.方法的重载
package day04;
public class t1 {
public void study(){
System.out.println("同学你好");
}
public void study(int sno){
System.out.println("学号为:"+sno+"的同学,欢迎来到**学院!");
}
public void study(String name){
System.out.println(name+"你好");
}
public void study(int sno,String name){
String s=name+" 同学,你好"+"\n"+"你的学号是:"+sno;
System.out.println(s);
}
public void study(int sno,int name){
System.out.println(name+"你好");
}
public String study(String sex,int age){
String s="年龄:"+age+"性别:"+sex;
return s;
}
public void name(){
System.out.println("同学你好");
}
public String study1(T2 t2){
t2.call2();
return null;
}
}
三.构造器
特点:
函数名与类名相同
不用定义返回值类型
没有具体的返回值。
作用:
给对象进行初始化。
语法:
[修饰符] 方法名与类名相同([参数类型 参数名,参数类型 参数名]){
}
例:public Student() {
}
注意:
默认构造函数的特点。
多个构造函数是以重载的形式存在的。
构造器没有返回类型,包括关键字void也不能有。
任何类都含有构造器。如果没有显式地定义类的构造器,则系统会为该类提供一个默认的构造器。这个默认的构造器不含任何参数。一旦在类中显式地定义了构造器,系统就不会再为这个类提供默认的构造器了。
Java语言中 可以为某一个类提供多个重载的构造方法
构造器用来实例化对象的而且每个类都默认有一个无参的构造器,若重载带参数构造器 则默认无参的构造器被覆盖 所以要用无参构造器就要重写无参构造器的方法
构造器的使用:
通过使用new运算符构造对象
语法:
类名 类变量名=new 类名([参数值]);
例:Student stu=new Student();
-----构造器分为有参数和无参数
例:
package day04;
public class T3 {
int sno;
String sname;
String sex;
int age;
static String city;
public T3(){
}
public T3(int sno,String sname,String sex,int age,String city){
this.sname=sname;
this.sno=sno;
this.sex=sex;
this.age=age;
this.city=city;
System.out.println("学号:"+sno+" 姓名:"+sname+" 性别:"+sex+" 年龄:"+age+" 居住地:"+city);
}
public T3(int sno,String sname,String sex,int age){
this.sname=sname;
this.sno=sno;
this.sex=sex;
this.age=age;
System.out.println("学号:"+sno+" 姓名:"+sname+" 性别:"+sex+" 年龄:"+age+" 居住地:"+city);
}
public T3(int sno,String sname,String sex){
this.sname=sname;
this.sno=sno;
this.sex=sex;
System.out.println("学号:"+sno+" 姓名:"+sname+" 性别:"+sex+" 年龄:"+age+" 居住地:"+city);
}
public T3(int sno,String sname){
this.sname=sname;
this.sno=sno;
System.out.println("学号:"+sno+" 姓名:"+sname+" 性别:"+sex+" 年龄:"+age+" 居住地:"+city);
}
public static void school(){
System.out.print(city+"大学");
}
public static void banji(){
school();
System.out.print("信息工程系");
}
}
测试类的使用,检验上述代码
package day04;
public class Test3 {
public static void main(String[] args) {
T3 s1=new T3(120,"张三","男",100,"武汉");
T3 s2=new T3(120,"张三","男",100);
T3 s3=new T3(120,"张三","男");
T3 s4=new T3(120,"张三");
T3.city="北京";
T3.banji();
}
}