一、类和类的实例化
-
类就是一类对象的统称。对象就是这一类具体化的一个实例
-
模子---------》月饼
类-----------》对象
-
一个类产生多个对象;
-
基本语法
// 创建类
class <class_name>{
field;//成员属性
method;//成员方法 }
// 实例化对象
<class_name> <对象名> = new <class_name>();
- class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
类中的元素称为:成员属性。类中的函数称为:成员方法。
class Person {
public int age;//成员属性 实例变量
public String name;
public String sex;
public void eat() {//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
- 用类类型创建对象的过程,称为类的实例化
class Person {
public int age;//成员属性 实例变量
public String name;
public String sex; 比特科技
public void eat() {//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
public class Main{
public static void main(String[] args) {
Person person = new Person();//通过new实例化对象
person.eat();//成员方法调用需要通过对象的引用调用
person.sleep(); //产生对象 实例化对象
Person person2 = new Person();
Person person3 = new Person();
}
}
**输出结果为:**
吃饭!
睡觉!
- 注意:
- new 关键字用于创建一个对象的实例.
- 使用 . 来访问对象中的属性和方法.
- 同一个类可以创建对个实例.
- 字段 (field)
class Person {
public String name; // 字段
public int age;
}
注意事项:
-
使用 . 访问对象的字段.
-
“访问” 既包含读, 也包含写.
-
对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值.
-
成员变量:如果未赋值,那么他的默认值就是自己对应的”0“值
- static 关键字
a) 修饰属性,Java静态属性和类相关, 和具体的实例无关. 换句话说, 同一个类的不同实例共用同一个静态属性.
class TestDemo{
public int a;
public static int count;
}
public class Main{
public static void main(String[] args) {
TestDemo t1 = new TestDemo();
t1.a++;
TestDemo.count++;
System.out.println(t1.a);
System.out.println(TestDemo.count);
System.out.println("============");
TestDemo t2 = new TestDemo();
t2.a++;
TestDemo.count++;
System.out.println(t2.a);
System.out.println(TestDemo.count);
}
}
输出结果为:
1
1
============
1
2
//count被static所修饰,所有类共享。且不属于对象,访问方式为:类名 . 属性。
**b) 修饰方法:**如果在任何方法上应用 static 关键字,此方法称为静态方法。
- 静态方法属于类,而不属于类的对象。
- 可以直接调用静态方法,而无需创建类的实例。
- 静态方法可以访问静态数据成员,并可以更改静态数据成员的值。
class TestDemo{
public int a;
public static int count;
public static void change() {
count = 100;
//a = 10; error 不可以访问非静态数据成员
}
}
public class Main{
public static void main(String[] args) {
TestDemo.change();//无需创建实例对象 就可以调用
System.out.println(TestDemo.count);
}
}
输出结果:
100
注意:
-
所有被static所修饰的不管是方法,成员的调用或访问都只通过类名;
也就是说:被static修饰就不依赖于对象存在;依赖于类,只有一份,存在于方法区; -
在静态方法的内部不能访问非静态的数据成员;
private实现封装
被 private 修饰的成员变量或者成员方法, 不能被类的调用者使用.
class Person {
private String name = "张三";
private int age = 18;
public void show() {
System.out.println("我叫" + name + ", 今年" + age + "岁"); }
}
class Test {
public static void main(String[] args) {
Person person = new Person();
person.show();
}
}
// 执行结果
我叫张三, 今年18岁
getter和setter方法
class Person {
private String name;//实例成员变量
private int age;
public void setName(String name){
//name = name;//不能这样写
this.name = name;//this引用,表示调用该方法的对象
}
public String getName(){
return name;
}
public void show(){
System.out.println("name: "+name+" age: "+age);
}
}
public static void main(String[] args) {
Person person = new Person();
person.setName("caocao");
String name = person.getName();
System.out.println(name);
person.show();
}
// 运行结果
caocao name: caocao age: 0
构造方法
- **语法规则:
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
class Person {
private String name;//实例成员变量
private int age;
private String sex; //默认构造函数 构造对象
public Person() {
this.name = "caocao";
this.age = 10;
this.sex = "男";
}
//带有3个参数的构造函数
public Person(String name,int age,String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main{
public static void main(String[] args) {
Person p1 = new Person();
//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
p1.show();
Person p2 = new Person("zhangfei",80,"男");
//调用带有3个参数的构造函数
p2.show(); } }
// 执行结果
name: caocao age: 10 sex: 男
name: zhangfei age: 80 sex: 男