类
package test.java15;
/**
* 类描述客观世界里某"一类"对象的事物特性(属性和行为)(某一个类事物的集合和抽象),而对象则是类的具体存在。
* 类也模板
* 类-一般来说:构造函数,属性,方法(行为)和代码块。
*/
/**
* 成员包括:属性和方法
* 类的结构:
* 访问修饰符 类名{
*
* //构造函数
* 访问修饰符 类名(){};
* 访问修饰符 类名(参数列表){};
*
* //属性定义
* 【访问修饰符】 【修饰词(static final)】 数据类型 变量名 = 值;
* 【访问修饰符】 【修饰词(static final)】 数据类型 变量名 ;
*
* //方法
* 【访问修饰符】 【修饰词(static final)】 返回值 方法名{
* //方法体
* }
*
* }
*
*/
public class Student {
/**
* 属性和方法
* 访问修饰符[private publie protected 缺省的] 修饰词(static ,final ,transient,volatile) 数据类型 = 字面值;
* 在一个类中,属性和方法又分为两种情况:
* 静态成员和非静态成员
* 静态成员是属于类本身的,不属于对象=--共享属性和方法
*
* 静态成员在编译的时候就已经确定内存空间的大小,和当前类本身,存放入静态区中。---栈区
* 非静态成员,在new在申请空间地址的时候 创建的=---堆区
*
* 总结:
* 1: 非静态方法即可调用静态成员,也可以调用非静态元素
* 2:静态方法中只能调用静态成员
* 3:静态成员,一定要通过类去调用
* 4:静态成员属于类,他不能用this关键字
*/
//属性--全局变量
/**
* 全局变量--定义在方法以外,类以内的变量
* 全局变量可以不用赋值
* byte short int long 默认0
* float double 默认 0.0
* boolean 默认 false
* char \u0000 空格
* 如果是封装数据类型和类,默认 null
* 不赋值,就使用它们的默认值
*/
private String name;
private static int age; //静态属性
private Double sal;//非静态属性
//构造函数
public Student(String nameString){
System.out.println("您使用的类名字==="+nameString);
}
//非静态方法
public void buyBook(Double money) {
/**
* 局部变量--定义在方法或者代码块以内的变量
* 1:如果使用了一定要赋值
* 2:局部变量会随着方法执行完毕,生命周期结束,以作用域{}为周期,{}以外就消亡
* 3:在开发过程中,尽量避免全局变量与局部变量重名
*
*/
Double sal = 12000D; //局部变量
System.out.println(this.name+"工资"+this.sal+",买了一本书!"+"花了"+money);
System.out.println(name+"工资"+sal+",买了一本书!"+"花了"+money);
}
//静态方法
public static void staticDemo() {
System.out.println(Student.age);
// System.out.println(name); //静态方法调用非静态属性,会编译错误,并且不能使用this关键字
}
public static void main(String[] args) {
//对象---肯定类有关系
//对象是通过类的构造函数(析构函数)去堆里去申请出来一块内存空间地址,申请过程---其实就是非静态成员拷贝的过程.
Student student= new Student("学生类");
//只有对象才能给属性赋值,和调用方法
student.name = "fyl";
Student.age = 11; //建议不适用对象的方式赋值,直接使用类的方式
// student.age = 12; //对象的方式也可以
student.sal = 10000D;
//下面语句就是通知cpu执行方法体的过程,形成独立的内存空间,里面数据类型是随着方法执行完毕,而结束
student.buyBook(200.6D);
Student.staticDemo();
}
}
运行结果
您使用的类名字===学生类
fyl工资10000.0,买了一本书!花了200.6
fyl工资12000.0,买了一本书!花了200.6
11
了解的知识点--代码块
package test.java03;
public class Test {
private static String name;
private int age;
//构造函数
public Test(int age) {
this.age = age;
System.out.println("3---我是构造函数");
}
/**
* 代码块--初始化成员变量的--编译阶段已经写入java堆
* 执行顺序:
* 静态代码块>>>普通代码块>>>构造函数
* 包括静态代码块和普通代码块
*/
//普通代码块--即可初始化非静态成员变量,也可初始化静态成员变量
{
age = 30;
name = "yy";
System.out.println("2---我是普通代码块");
}
//静态代码块--只能初始化静态成员变量
static {
name = "ff"; //不能定义age
System.out.println("1---我是静态代码块");
}
public static void main(String[] args) {
Test test = new Test(10);
System.out.println(Test.name+"======="+test.age);
}
}
输出结果
1---我是静态代码块
2---我是普通代码块
3---我是构造函数
yy=======10