1.什么是类?
类:在java中用来描述具有性质或特征相似得元素抽象出来得自定义复合数据类型
创建Java类
通过class关键字创建java类
格式:
[ public ] class 类名{}
public :访问限制修饰符
class :定义类的关键字
类名 :首字母得大写
{} : 类体,放得内容具有性质和特征相似的属性和方法
例子:
public class TestClass {
int nid = 1001; //属性
String name = "zhansan" ;//属性
public void sayHi(){ //方法
System.out.println("我的名字叫:" + this.name);
}
3.java类体{}中可以编写什么?
{}--放的内容具有性质或者特征相似得元素 既 属性和方法
- java类中得属性(类中变量)
- 变量得本质就是保存数据
- 变量得组成 1.数据类型 2.变量名称 3.初始值 4. 作用域
- 变量用来描述事物得属性
- 变量得分类
4.类中方法外---全局变量[成员变量]
特点:
- 可以使用访问限制修饰符[ 默认不写也在被修饰 protected ]。
- 可以不用赋初始值,系统会自动赋予初始值,可以根据条件需要始终初始值
- 可以在本类得任何地方使用。
5.类中方法内[方法参数]---局部变量
特点:
- 不能使用访问修饰符。
- 方法体中必须设置初始化。
- 只能在本方法内部使用。
6.成员变量隐藏
在同一个类中,局部变量和全局变量名字相同得时候,在局部变量所在得方法中访问,它会默认访问局部变量,这回导致不能直接访问到全局变量(更定义的类型无关,只和变量名有关)。使用this.全局变量名称,才可以得到被隐藏得全局变量。
7)静态成员变量与实例成员变量得区别
静态成员变量 | 实例变量 |
| |
需用static关键字就行修饰 | 不需要关键字定义 |
可以被所创建得对象访问,可以通过类访问 | 只能通过所被创建得对象进行访问 |
可以数据共享 | 不可以数据共享 |
程序运行前分配数据存储空间[早] | 程序运行时分配存储空间 |
2.类中的方法
概念:类中的方法描述事物的功能行为
普通类中的方法分为 静态方法,实例方法,构造方法
1)实例方法
格式:
访问限制修饰符 方法的返回值类型 方法名称(参数列表){方法体}
(1).访问限制修饰符--public 缺省的【没有写】
(2).方法的返回值类型
就是方法执行的结果
2.1有返回值时,方法的返回值类型一定是方法执行的结果的具体类型
2.2方法的返回类型可以是基本类,复合类型(自定义复合类型和java提供的复合类型)
2.3方法的最后一句话一定是 retrun xxx;
例子:
public int methods(int num){
num = num + 100;
return num;
}
2.4.没有返回值,方法的返回值类型使用void代替。
public void methods(int num){ }
(3).方法名称
合法的标识符【首字母小写,从第二个单词开始首字母大写】
(4).参数列表
参数实际上是变量,没有初始值,属于局部变量【数据类型 变量名称】
可以没有,也可以有,也可以有多个,多个参数之间用“,”
(5).方法体
编写具体实现过程的地方。
例子:
//功能:返回1累加10的和
public int getSum(){
int sum = 0;
for (int i = 1; i < 11; i++) {
sum += i;
}
return sum;
}
2.构造方法
作用:
构造函数的最大作用就是创建对象时完成初始化,当我们在new一个对象并传入参数的时候,会自动调用构造函数并完成参数的初始化。
格式:
访问限制修饰符 类名(参数列表){ 构造体 }
注意:
- 我们创建好一个java类之后,默认类体中就有一个默认的无参数构造方法存在。只是没有显示出来。
- 当类中出现的有参数的构造方法时,默认无参数的构造方法会被覆盖,此时我们如果需要无参数的构造方法时,就需要手动给出无参数构造方法
例子:
类名:FunctionTest.class
String name;
FunctionTest() {
// TODO Auto-generated constructor stub
}
public FunctionTest (String name){
this.name = name;
}
3.静态方法(类方法)
特点1. 使用static关键字修饰的实例方法就是静态方法【类方法】
特点2. 随着类的加载而加载,比实例的方法要创建的早。静态成员优先于对象存在。
特点3. 对象直接可以共享方法,听过类名进行调用,节约内存。
格式:
访问限制修饰符 static 方法的返回值类型 方法名称(参数列表){方法体}
例子:
public static void teststati(){
System.out.println("我是一个静态方法");
}
实例方法与静态方法【类方法】的区别?
- 访问的方式不同
- 实例方法是通过对象调用的
- 静态方法可以通过类调用,或者通过对象调用(不推荐)
- 声明的方式不同 : 类方法需要通过static关键字进行声明
- 创建的时机不同:
- 静态成员方法的会随着类的加载而加载。
- 实例方法是创建对象的时候加载的。
- 静态成员方法的开辟内存空间的时间早于实例方法
3.共享空间,节约内存
4.Static的生命周期长于实例方法
2.方法重载
如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。
特点:
1)方法名相同
2)参数的参数类型、参数个数不一样
3) 方法的返回值可以类型不同(和这个没关系)
4)方法的修饰符可以不相同(和这个没关系)
特别的:main 方法也可以被重载
例子:
/*
* 求和
* 求两个数的和
* */
//可以传递2个int类型的数据
public int addsum(int a,int b){
return a + b;
}
//可以传递2个小数
public double addsum(double a ,double b){
return a + b;
}
// 可以传递1个整数 1个小数
public double addsum(int a,double b){
return a + b;
}
// 也可以计算3个数的和
public double addsun(double a,double b, double c){
return a + b + c;
}
2.同一个类中方法与变量的调用关系
1.方法里面调用变量
构造方法、实例方法 | 类方法 |
构造方法、构造方法中可以调用实例变量,默认this.实例变量,可以省略this | 静态方法中不可以调用实例变量 |
构造方法、实例方法中可以调用静态成员变量,默认类名.静态成员变量,也可以this.静态成员变量,可以省略类名/this | 静态方法中可以调用静态成员变量,默认类名.静态成员变量,可以省略类名 静态方法中不能出现this |
构造方法、实例方法中可以调用局部变量,局部变量名称访问 | 静态方法中可以调用局部变量,局部变量名称访问 |
//全局方法name
String name = "zhansgan";
//静态方法age
static int age = 18;
public Test(){
System.out.println("构造函数");
//构造函数中使用成员变量
System.out.println(name);
System.out.println(this.name);
System.out.println(age);
System.out.println(Test.age);
System.out.println(this.age);
}
public void getmethods(){
System.out.println("实例方法");
System.out.println(name);
System.out.println(this.name);
System.out.println(age);
System.out.println(Test.age);
System.out.println(this.age);
}
public static void staticmethods(){
System.out.println("静态方法");
// System.out.println(name);
// System.out.println(this.name);
System.out.println(age);
System.out.println(Test.age);
}
2.方法里面调用方法
构造方法、实例方法 | 类方法 |
可以访问其他的构造方法、实例方法 | 静态方法中可以访问构造方法,new+构造方法(); |
构造方法中可以访问实例方法 同样实例方法也可以访问构造方法 默认this.实例方法,可以省略this; | 静态方法中不能访问实例方法 静态方法中不能出现this |
构造方法、实例方法中可以访问静态方法 默认类名.静态方法,也可以this.静态方法,可以省略类名/this | 静态方法中能访问其他的静态方法,默认类名.静态方法,可以省略类名 |
例子:
public Test2(){
System.out.println("构造函数");
//构造函数中使用成员变量
new Test2("zhangsan");
getmethods();
staticmethods();
}
public Test2(String name){
System.out.println("名字: " + name);
}
public void getmethods(){
System.out.println("实例方法1");
new Test2("zhangsan");
getmethods2();
staticmethods();
}
public void getmethods2(){
}
public static void staticmethods(){
System.out.println("静态方法");
System.out.println("实例方法2");
staticmethods2();
new Test2("zhangsan");
}
public static void staticmethods2(){
System.out.println("静态方法2");
}
无奈源于不够强大