java中同一个类中元素的相互关系
1.同一类中方法和变量的调用关系
1.1.在同一个类中只能由方法来调用变量,不能用变量来调用方法。
1.2.在构造方法中调用变量。
可以访问本类中的实例变量,默认是this.实例变量名称,可以省略this.
可以访问本类中的类变量,默认是类名.类变量名称,可以省略类名,也可以使用this,可以省略this。
可以访问本方法中的局部变量,只能变量名称访问。
例如:
package com.click369.test.demo1;
public class StudentBean {
int stuid=1001; //实例变量
static String stuname="zhangsan"; //静态成员变量[类变量]
/**
* 无参数构造方法
*/
public StudentBean(){
System.out.println("构造方法访问实例变量stuid=="+this.stuid);
System.out.println("构造方法访问实例变量stuid=="+stuid);
System.out.println("构造方法访问类变量stuname=="+StudentBean.stuname);
System.out.println("构造方法访问类变量stuname=="+stuname);
System.out.println("构造方法访问类变量stuname=="+this.stuname);
char sex='男'; //局部变量
//System.out.println("构造方法访问局部变量sex=="+this.sex);
//System.out.println("构造方法访问局部变量sex=="+StudentBean.sex);
System.out.println("构造方法访问局部变量sex=="+sex);
}
}
1.3.实例方法中调用变量
可以访问本类中的实例变量,默认this.实例变量名称,可以省略this.
可以访问本类中的类变量,默认是类名.类变量名称,可以省略类名,也可以使用this,可以省略this。
可以访问本方法中的局部变量,只能变量名称访问。
例如:
package com.click369.test.demo1;
public class StudentBean {
int stuid=1001; //实例变量
static String stuname="zhangsan"; //静态成员变量[类变量]
/**
* 实例方法
*/
public void testMethod(){
System.out.println("实例方法访问实例变量stuid=="+this.stuid);
System.out.println("实例方法访问实例变量stuid=="+stuid);
System.out.println("实例方法访问类变量stuname=="+StudentBean.stuname);
System.out.println("实例方法访问类变量stuname=="+stuname);
System.out.println("实例方法访问类变量stuname=="+this.stuname);
char sex='男'; //局部变量
//System.out.println("构造方法访问局部变量sex=="+this.sex);
//System.out.println("构造方法访问局部变量sex=="+StudentBean.sex);
System.out.println("构造方法访问局部变量sex=="+sex);
}
}
1.4.类方法【静态方法】中调用变量
不能出现this关键字。
不能访问本类中的实例变量。
可以访问本类中类变量,默认类名.变量名称,可以省略类名。
可以访问本方法中的局部变量,只能变量名称访问。
例如:
package com.click369.test.demo1;
public class StudentBean {
int stuid=1001; //实例变量
static String stuname="zhangsan"; //静态成员变量[类变量]
/**
* 类方法【静态方法】
*/
public static void testStaticMehtod(){
//System.out.println("类方法【静态方法】访问实例变量stuid=="+this.stuid);
//System.out.println("类方法【静态方法】访问实例变量stuid=="+stuid);
System.out.println("类方法【静态方法】访问类变量stuname=="+StudentBean.stuname);
System.out.println("类方法【静态方法】访问类变量stuname=="+stuname);
//System.out.println("类方法【静态方法】访问类变量stuname=="+this.stuname);
char sex='男'; //局部变量
//System.out.println("类方法【静态方法】访问局部变量sex=="+this.sex);
//System.out.println("类方法【静态方法】访问局部变量sex=="+StudentBean.sex);
System.out.println("类方法【静态方法】访问局部变量sex=="+sex);
}
}
2.同一类中方法和方法的调用关系
2.1.构造方法调用其他的方法.
可以访问本类中其他的构造方法,new + 构造方法。
可以访问本类中的实例方法,默认this.实例方法 ,可以省略this.
可以访问本类中的类方法,默认类名.类方法,可以省略类名,也可以this.类方法,可以省略this.
例如:
package com.click369.test.demo1;
public class PersonBean {
/**
* 无参数构造方法
*/
public PersonBean(){
//new PersonBean();//错误
new PersonBean("test");
this.testMethod();
testMethod();
PersonBean.testStaticMethod();
testStaticMethod();
this.testStaticMethod();
}
/**
* 有参数的构造方法
* @param canshu
*/
public PersonBean(String canshu){
System.out.println("有参数的构造方法");
}
/**
* 实例方法
*/
public void testMethod(){
System.out.println("实例方法");
}
/**
* 类方法
*/
public static void testStaticMethod(){
System.out.println("类方法");
}
}
2.2 实例方法调用其他方法
可以访问本类的构造方法,默认是new + 构造方法;
可以访问本类中的实例方法,默认this.实例方法,可以省略this.
可以本类中的类方法,默认类名.类方法,可以省略类名,也可以this.类方法,可以省略this
例如:
package com.click369.test.demo1;
public class MyClass {
public MyClass(){
System.out.println("无参数构造方法");
}
public MyClass(String value){
System.out.println("有参数构造方法参数是=="+value);
}
public void testMehtod(){
System.out.println("实例方法");
}
public static void testStaticMehtod(){
System.out.println("类方法");
}
/**
* 实例方法
*/
public void method(){
//new MyClass();
new MyClass("Zhangsan");
this.testMehtod();
testMehtod();
MyClass.testStaticMehtod();
testStaticMehtod();
this.testStaticMehtod();
}
}
2.3 类方法访问其他方法
可以访问本类中的构造方法,new + 构造方法。
不可以访问本类中的实例方法。
可以访问本类中的其他类方法,默认类名.类方法,可以省略类名。
不能出现this
例如:
package com.click369.test.demo1;
public class TestClass {
public TestClass(){
System.out.println("无参数的构造方法");
}
public void tesrtMehtod(){
System.out.println(" 实例方法");
}
public static void testStaticMethod(){
System.out.println("类方法");
}
/**
* 类方法
*/
public static void method(){
new TestClass();
// this.tesrtMehtod();
// tesrtMehtod();
TestClass.testStaticMethod();
testStaticMethod();
// this.testStaticMethod();
}
}
3.方法的重载
在同一个java类中,出现的方法名称相同,但是方法的参数不同,这种现象就是方法的重载。
- 构造方法,实例方法,类方法都可以重载。
2.方法的重载一个方法类型和方法的返回值没有关系,只看名称和参数。
例如:
package com.click369.test.demo1;
public class DoxClass {
//构造方法重载
public DoxClass(){
}
public DoxClass(String value){
}
//实例方法重载
public int testMethod(int num){
return 100;
}
public double testMethod(double num){
return 100;
}
//类方法重载
public static int getInt(int num){
return num;
}
public static double getInt(int num ,double num2){
return num+num2;
}
}
4.this关键字
1.不能标识符
2.this表示本类对象【出现在哪一个类,就代表哪一个类的对象】
3.this不能出现在类方法中。
this用法===[Java程序=对象+消息]
我们在本类中本类自己定义的变量和方法时,也需要对象访问,而这个时候this就可以用来充当访问变量/方法的对象使用。
1. 在构造方法中访问实例变量/实例方法默认是this.实例变量/实例方法,this是可以省略。
2.在实例方法中访问其他的实变量/实例方法,默认是this.实例变量/实例方法,this是可以省略。
3.this不能出现在类方法中
4.如果需要强制使用被局部变量隐藏的成员变量的数据值的时候,一定不能省略this.
5.static关键字
static---静态的
用static关键修饰的变量叫静态成员变量
用static关键修饰的方法叫静态方法
在程序运行的时候static关键字,表示为static修饰的java元素【变量/方法】,提前分配好运行所需的内存空间。
通常情况下没有使用static修饰的变量和方法会在程序运行的时候分配内存空间,而使用static修饰的变量和方法则是要早于程序运行的时候分配内存空间,程序被加载的时候就已经分配好内存空间,这就是提前分配好运行所需的内存空间的意思。
静态成员变量、静态方法的内存分配时机要早于实例变量和实例方法的内存分配时机。当我们静态方法访问实例变量/实例方法时,此时实例变量和实例方法不存在,因此上我们地静态方法中是不能访问实例变量/实例方法。
作业:实例变量与静态成员变量有什么区别?【思考总结一下】