一、类是什么
1.类 —> 类型 —> 数据类型 —> 复合数据类型 —> 自定义复合数据类型
为什么有复合数据类型?
基本数据类型就8种,在开发中远远不够,所以我们就需要一个可以根据自己
的需求随时能制作出一个自己需要的数据类型。
2.类 —> 具有共同性质的一组事物的群体。 人类
在java中用来描述具有共同性质的一组事物的自定义的复合数据类型 —> 类。
复合数据类型的本质 —> 【根据自己的需求制作自己需要的数据类型的模式/规则/公式】
二、如何编写一个Java类
通过class关键字来创建一个类
例如:
public class Hello{
}
public — 访问限制修饰符【对类的访问权限】
class — 创建类的关键字【类的标志】
Hello — 类名【首字母大写】
{} — 类体
格式:
访问限制修饰符 class 类名{}
例如:
public class Student{ }
class User{ }
三、Java类中可以编写什么
描述一组事物的共同性质
例如:
杯子共同性质—>名字、形状、大小、颜色、装东西
名字,形状,大小,颜色-----是杯子的基本属性
装东西 —> 是杯子的基本功能
通过事物的基本属性和基本功能来描述具有共同性质的一组事物。
基本属性 — 变量
基本功能 — 方法
变量 — 是用来在类中描述事物的基本属性
方法 — 是用来在类中描述事物的基本功能
四、Java类中变量的分类及其基本特征
变量—保存数据
1. 数据类型【不一定就是之前的基本数据类型,也有可能是自定义的复合数据类型】
2. 变量名称【合法标识符–全字母小写】
3. 初始值
4. 作用域
按照在类中编写变量的位置划分:
1. 成员变量【全局变量】—> 类中方法外
(1) 可以使用访问限制修饰符,也可以不使用。
(2)可以不用赋予初始值,系统自动赋予默认值,也可以根据需要自己设置一个初始值。
(3)可以在本类中的任意一个方法中被使用
2. 局部变量-----------------------方法里/方法参数
(1)不能使用访问限制修饰符。
(2)必须设置初始值
(3)只能在本方法中使用。
例如:
public class Student{
public int stuid1; //可以使用访问限制修饰符
int stuid2; //也可以不使用限制修饰符[缺省的访问限制修饰符]
public String stuname1; //可以不用赋予初始值,系统自动赋予默认值
public String stuname2="zhangsan";//也可以根据需要自己设置一个初始值。
//成员变量【全局变量】---可以在本类中的任意一个方法中被使用
public void testMethod1(){
System.out.println("stuid1=="+stuid1);
System.out.println("stuname2=="+stuname2);
}
public void testMethod2(){
System.out.println("stuid1=="+stuid1);
System.out.println("stuname2=="+stuname2);
}
//......
public void testMethod_n(){
System.out.println("stuid1=="+stuid1);
System.out.println("stuname2=="+stuname2);
}
}
public class Person{
//方法1--testMethod1
public void testMethod1(){
//public char sex; //不能使用访问限制修饰符。
//char sex; //必须设置初始值
char sex=’男’; //局部变量
//只能在本方法中使用
System.out.println(“sex==”+sex);
}
//方法2--testMethod2
public void testMethod2(){
//只能在本方法中使用,超出本方法就不能使用
//System.out.println(“sex==”+sex);
}
}
五、什么是成员变量的隐藏
在同一个类中成员变量与某一个方法中的局部变量的名称相同,当我们在方法中使用这个成员变量的时候,得到的结果是局部变量的值,此时就是方法中的局部变量将类中成员变量的值隐藏了,这就是成员变量的隐藏。
例如:
public class User{
//成员变量
public String username=”zhangsan”;
public void testMethod1(){
//局部变量
char username=’A’;
//成员变量的隐藏
//成员变量的隐藏与变量数据类型无关,只与变量名称有关。
System.out.println(“username==”+username); //username==A
//如果我们需要强制使用被隐藏的成员变量,该怎么办?
//通过this访问被隐藏的成员变量
System.out.println(“username==”+this.username); //username==zhangsan
}
}
六、静态成员变量与实例变量的区别
静态成员变量与实例变量 —> 都是成员变量【全局变量】
1.可以使用访问限制修饰符,也可以不使用。
2.可以不用赋予初始值,系统自动赋予默认值,也可以根据需要自己设置一个初始值。
3.可以在本类中的任意一个方法中被使用
成员变量【全局变量】可以分为2种
按照成员变量【全局变量】是否使用static关键字
静态成员变量【类变量】—> 使用static关键字修饰的成员变量【全局变量】
实例变量 —> 没有使用static关键字修饰的成员变量【全局变量】
static关键字 —> 静态的 —> 提前分配存储数据的内存空间
没有使用static关键字修饰的元素,是在程序运行时分配存储数据的内存空间。
使用static关键字修饰的元素,是在程序运行前分配存储数据的内存空间。
例如:
public class TestClass{
public int classid=1001; //实例变量
public static String classname=”java班”; //静态成员变量【类变量】
static String classcode=”20200728”;//静态成员变量【类变量】
}
区别:
静态成员变量【类变量】 | 实例变量 |
---|---|
有static 关键字修饰 | 没有static 关键字修饰 |
程序运行前分配数据的内存空间【早】 | 程序运行时分配数据的内存空间【晚】 |
可以在多个同类对象之间共享数据值 | 不能在多个同类对象之间共享数据值 |
共同点:
都是成员变量【全局变量】