1.Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。
加了static就是静态类了
2.调用非静态方法:没有使用static修饰符修饰的方法,就是非静态方法,调用这种方法的时候是一定要使用对象的。因为非静态方法是属于对象的。
非静态属性也一样
3.在一个类中,静态方法之间可以相互调用,非静态方法之间也可以相互调用,非静态方法可以调用静态方法,静态方法不能调用非静态方法
4.java中调用非静态方法要先把类赋值给对象,没有定义类的话就把当前创建java函数文件名当作类,赋值方法是:类名 变量名=new 类名()
5.调用静态方法直接类名加方法()
6.值传参和引用传参
调用方法进行传参时,分为值传递和引用传递两种。
如果参数的类型是基本数据类型,那么就是值传递。
如果参数的类型是引用数据类型,那么就是引用传递。
值传递是实参把自己变量本身存的简单数值赋值给形参.
引用传递是实参把自己变量本身存的对象内存地址值赋值给形参.
所以值传递和引用传递本质上是一回事,只不过传递的东西的意义不同而已.
7.this关键字
在类中,this关键字可以起到一些特殊作用
【区别成员变量和局部变量】 //其实这个不太理解
【调用类中的其他方法】 //这个也可以说明this在类中表示当前类将来创建出的对象.
【调用类中的其他构造器】
import java.io.IOException;
public class object_oriented { //非静态类
/*Java中,类中的静态方法不能直接调用动态方法。
只有将某个内部类修饰为静态类,
然后才能够在静态类中调用该类的成员变量与成员方法。
加了static就是静态类了 */
public static void main(String[] args) {
//从代码运行角度考虑是先有类后又对象
// 类是对象的模板
//调用非静态方法:没有使用static修饰符修饰的方法,就是非静态方法
// 调用这种方法的时候是一定要使用对象的。因为非静态方法是属于对象的。
// 非静态属性也一样
Student m = new Student();
m.print("java中调用非静态方法要先把类赋值给对象,没有定义类的话就把当前创建java函数文件名当作类,赋值方法是:类名 变量名=new 类名()");
// 调用静态方法直接类名加方法()
int a11 = Student.max(4, 2);
System.out.println("调用静态方法直接类名加方法()"+a11);
//值传参
int a = 1;
System.out.println("before: a = "+a); //1
Student.changeNum(a);
System.out.println("after: a = "+a); //1
//引用传递
Student1 s = new Student1(); //非静态类之间的调用,可直接用类名调用外部的类
System.out.println("before: name = "+s.name); //null
changeName(s);
System.out.println("after: name = "+s.name); //tom
}
public static void changeName(Student1 s){ //下面也有个和changeName一样的函数
s.name = "tom";
}
// this在类中的作用
public static class Student{ //加了static静态类
private String name;
public void setName(String name){
//this.name表示类中的属性name
this.name = name; // 【区别成员变量和局部变量】
}
public void print1(){
//表示调用当前类中的setName方法
this.setName("tom"); //【调用类中的其他方法】
//默认情况下,setName("tom")和this.setName("tom")的效果是一样的
}
//下面这2句是java中的构造器
// 调用类中的其他构造器
public Student(){
//调用一个参数的构造器,并且参数的类型是String
this("tom"); ////并且这局调用的代码只能出现在构造器// 中的第一句.
} //this的这种用法,只能在构造器中使用.普通的方法是不能用的.
public Student(String name){
this.name = name;
}
// this在类中表示当前类将来创建出的对象.
public static int max(int a,int b){ //静态类中可有静态方法,非静态方法
int c = a>b?a:b;
System.out.println(c);
return a>b?a:b;
}
public static void changeNum(int a){
a = 10;
System.out.println("这个changNum中的值会被外界相同得变量改变么是10么:"+a);
}
public String sayHello(){
return "hello";
// print("sss");
}
public void print(String msg){
System.out.println(msg);
sayHello();
/* 在一个类中,静态方法之间可以相互调用,非静态方法之间也可以相互调用
非静态方法可以调用静态方法,静态方法不能调用非静态方法 */
}
//异常抛出类型
// public void readFile(String file)throws IOException{
// } //不能同时使用两个相同的方法
public void readFile(String file)throws IOException,ClassNotFoundException{}
}
}
class Student1{
String name;}