- 类的定义:
- 类是对象的抽象,它用来描述一组对象的共同特征和行为。
- 类中可以定义成员变量跟成员方法,其中成员变量是用于描述对象的特征,称为属性,
- 成员方法用于描述对象的行为,可简称为方法。
- eg: Person.java
class Person{
int age;//定义int类型的变量age
// 定义speak()方法
void speak(){
System.out.println("大家好,我今年"+age+"岁!");}
}}
- 类的封装:
- 所谓类的封装是定义一个类时,将类的属性私有化,即使用private关键字来修辞,私有属性只能在它所在的类中被访问。为了能让外界访问私有属性,需要提供一些使用public修饰的公有方法,其中包括用于获取属性值的getXXX()方法和设置属性值的setXXX()方法。
- eg:Example04.java
private String name;//将name属性私有化
private int age;//将age属性私有化
//下面是公有的getXxx()和setXxx()方法
public String getName()
{ return name; }
public void setName(String stuName)
{ name=stuName; }
public int getAge()
{ return age; }
public void setAge(int stuAge)
{
//下面是对传入的参数进行检查
if(stuAge<=0)
System.out.println("年龄不合法。。。");
}else{ age=stuAge; //对属性赋值}
}
}
public void introdyce(){
System.out.printlln("大家好,我叫"+name+",我今年"+age+"岁!");
} }
public class Example04{
public static void main(String[] args){
Student stu=new Student();
stu.setAge(-30);
stu.setName("李芳");
stu.introduce();
}}
- 构造方法的定义
- 方法名与类名相同
- 在方法面前没有返回值类型的声明
- 在方法中不能使用return语句返回一个值。
- eg: Example05.java
//下面是类的构造函数
public Person()
System.out.println("无参数的构造函数被调用了。。。");
}
}
public class Example05{
public static void main(String[] args){
Person p =new Preson();//实例化Pserson对象
}
}
- eg:Examp;e06.java 有参数化
int age;
public Person(int a){
int age;}
public void speak(){
System.out.println("I am "+age+"years old.!");
}}
public class Example06{
public static void main(String[] args){
Person p=new Person(20);
p.speak();
}}
- 构造方法的重构
- eg:
String name;
int age;
public Person(String con_name,int con_age){
name=con_name;
age=con_age;
}
public Person(String con_name)
{name=con_name}
public void speak(){
System.out.println("大家好,我叫"+name+",我今年"+age+"岁!");
}}
public class Example07{
public static void main(String[] args){
//创建两个对象P1 P2
Person p1=new Person("成杰");
Person p2=new Person("李丹",18);
p1.speak;
p2.speak;}}
- this关键字
- 通过this关键字可以明确地访问一个类的成员变量,解决与局部变量名称冲突问题
int age;//局部变量
public Person(int age)//成员变量
{this.age=age;}
public int getAge(){
return this.age; }
}
注意:这里的this.age是调用成员变量,单纯age是调用局部变量;
2.通过this关键字调用成员方法
class Person{
public void openMouth(){
..................}
public void speak(){
this.openMouth();}}
3.构造方法是在实例化对象时被JAVA虚拟机自动调用,在程序中不能像调用其他方法一样去调用构造方法,但可以在一个构造方法中使用“this([参数1,参数2...])"的形式来调用其他的构造方法。
class Person{
public Person(){
System.out.println("无参的构造方法被调用了。。。");
}
public Person(String name)
{ this(); //调用无参的构造方法
System.out.println("有参的构造函数被调用了。。。");
}
}
public class Example10{
public static void main(String[] args){
Person p=new Person("itcast"); //实例化Person对象
}}
在使用this调用类的构造方法是,应注意几点:
- 只能在构造方法中使用this调用其他的构造方法,不能再成员方法中使用
- 在构造函数方法中,使用this调用构造方法的语法必须位于第一行,且只能出现一次。
- 不能在一个类的两个构造方法中使用this互相调用,
- 下面的写法编译会报错
- eg:
- class Person{
- public Person(){
- this("小芳");//调用有参的构造方法
- System.out.println("无参的构造方法被调用了。。。");
- }
- public Person(String name){
- this();//调用无参的构造方法
- System.out.println("有参得构造方法被调用了。。。");
- }}
- static关键字
1.当定一个类是,只是描述某类事物的特征跟行为时,并没有产生具体的数据。只是有通过new关键字创建该类的实例对象后,系统才会为每个对象分配空间,储存各自的数据,有时候我们希望某些特定的数据在内存中只有一份而且能够被一个类所有实例对象所共享。例如:某高校的某个学生共享同一个学校的名称,此时完全不必再每个学生对象所占用的内存空间中都定一个变量来表示学校名称,为可以在对象以外的空间定义一个表示学校名称的变量让所有的对象来共享。具体内存中的分配情况 。以下用代码来实例:
class Student{
static String schoolName;//定义静态变量shcoolName
}
public class Example12{
public static void main(){
Student stu1=new Student();
Student stu2=new Student();
Student.schoolName="传智播客"; //为静态变量赋值
System.out.print("我的学校是"+stu1.schoolName);
System.out.print("我的学校是"+stu2.schoolName);
}
}
注意:static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错,下面的代码是错误的实例:
public class Student
{ public void study(){
static int num=10; //这行代码是非法的,编译会报错
}
}
2.静态方法(在类中定义的方法前加上static关键字即可)
好处: 1.该方法可以不用根对象绑定到一起 可以不创建对象就调用某个方法。
2.直接用“类名.方法名”的方式来访问
代码示例:
class Person(){
public static void sayHello(){ //定义静态方法
System.out,println("Hello");
}}
class Example03{
public static void main(String[] args)
{Person.sayHello();//调用静态方法
}}
注意:在y一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用是可以不创建任何对象。
- 静态代码块
- 当类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次。
Example14.java
class Example14{
//静态代码块
static{
System.out.println("测试类的静态代码块执行了");
}
public static void main(String[] args){
Person1 p1=new Person();
Person2 p2=new Person();
}}
class Person{
static String countiy;
//下面是一个静态代码块
static{
country="china";
System.out.println("Person类中的静态代码块执行了");
}}