所谓的对象其实就是通过java类所产生的实体。
例如:盖楼房的图纸就是Java类,根据这个图纸修建起来的能够被看见,被使用的这个实际存在的楼房,就是相当于是用过这个图纸得到的对象。
Java类实际是一个抽象意义上的概念,对象就是通过这个java类的抽象概念具体化之后的一个具体概念。
2.1java类是构造对象的模板。
2.2对象是这个模板的具体实现。
通过new + 构造方法就可以得到一个类的对象。因此上一个类中的构造方法就显得很重要,所以我们通过class关键字定义出来的java类,默认就是有一个无参数的构造方法存在,只不过我们没有显式写出这个无参数的构造。当出现有参数的构造方法时,最好能够显式写出这个无参数的构造方法。
类中的构造方法就是为了创建对象而存在的。
通过new 构造方法就可以得到一个类的对象是一个没有名称的对象,因此上也叫匿名对象。所以通常情况下我们都是需要定义/声明一个该类的变量来保存这个类的对象。我们把保存对象的这个类的变量又叫引用。【引用中实际上保存的是该对象在内存的实际地址】
例如:
package com.click369.test.demo1;
public class MyTestClass {
public int testid=1001;
public String testname="zhangsan";
public MyTestClass(){
System.out.println("无参数的构造方法--创建对象的时候要使用");
}
public void method(){
System.out.println("MyTestClass类中的实例方法");
}
public static void staticMethod(){
System.out.println("MyTestClass类中的类方法");
}
}
//创建MyTestClass类的对象
//下面的java代码创建的MyTestClass对象没有名称所以new MyTestClass();匿名对象
//通常情况下我们需要为这个匿名对象起个名称【定义/声明该类的变量】,把匿名对象赋值给定义的变量
//MyTestClass mtc;
//mtc=new MyTestClass();
MyTestClass mtc=new MyTestClass();
//这时匿名对象就有了名称,这个名称就是定义/声明该类的变量
4.1 在其他类的构造方法中访问该类的变量【实例变量/类变量】
4.1.1 对象.实例变量
4.1.2 对象.类变量/类名.类变量
4.2 在其他类的实例方法中访问该类的变量【实例变量/类变量】
4.2.1 对象.实例变量
4.2.2 对象.类变量/类名.类变量
4.3 在其他类的类方法中访问该类的变量【实例变量/类变量】
4.3.1 对象.实例变量
4.3.2 对象.类变量/类名.类变量
例如:
public class TestClass {
public int testid=1001; //实例变量
public static String testname="zhangsan";//类变量
}
package com.click369.test.demo1;
public class OtherClass {
public OtherClass(){
//java程序=对象+消息
//创建TestClass类的对象
TestClass tc1= new TestClass();
System.out.println("testid=="+tc1.testid);
System.out.println("testname=="+tc1.testname);
System.out.println("testname=="+TestClass.testname);
}
public void testMethod(){
//java程序=对象+消息
//创建TestClass类的对象
TestClass tc1= new TestClass();
System.out.println("testid=="+tc1.testid);
System.out.println("testname=="+tc1.testname);
System.out.println("testname=="+TestClass.testname);
}
}
public class TestMain {
public static void main(String[] args) {
//java程序=对象+消息
//创建TestClass类的对象
TestClass tc1= new TestClass();
System.out.println("testid=="+tc1.testid);
System.out.println("testname=="+tc1.testname);
System.out.println("testname=="+TestClass.testname);
}
}
1.其他类的构造方法中方法该类的构造方法,实例方法,类方法
1.1 new + 构造方法 【创建对象】
1.2 对象.实例方法
1.3 对象.类方法 / 类名.类方法
2.其他类的实例方法中方法该类的构造方法,实例方法,类方法
2.1 new + 构造方法 【创建对象】
2.2 对象.实例方法
2.3 对象.类方法 / 类名.类方法
3.其他类的类方法中方法该类的构造方法,实例方法,类方法
例如:
package com.click369.test.demo2;
public class Student {
public Student(){
System.out.println("Student类的构造方法");
}
public void testStudent(){
System.out.println("student类的实例方法");
}
public static void testStaticStudent(){
System.out.println("student类的类方法");
}
}
package com.click369.test.demo2;
public class OtherClass {
public OtherClass(){
Student stu1= new Student();
stu1.testStudent();
stu1.testStaticStudent();
Student.testStaticStudent();
}
public void method(){
Student stu1= new Student();
stu1.testStudent();
stu1.testStaticStudent();
Student.testStaticStudent();
}
public static void main(String args[]){
Student stu1= new Student();
stu1.testStudent();
stu1.testStaticStudent();
Student.testStaticStudent();
}
}
注意:以上的测试是建立在该类的方法/变量的修饰是public,如果换其他的修饰符效果可能会不一样。
其他的修饰符后面会详细介绍
参数--变量【接收本方法之外的数据,进入本方法参与运算】
参数是可有可无,可有多,可有少
口诀:要什么,给什么
要什么:方法的参数个数,参数的类型
给什么:传递具体数据值,传递引用
例如:
package com.click369.test.demo3;
public class Student {
public Student(){
System.out.println("Student类的无参数构造方法");
}
public Student(int num){
System.out.println("Student类的有参数构造方法参数是num=="+num);
}
public Student(MyClass mc){
System.out.println("Student类的有参数构造方法参数是mc=="+mc);
}
public void methodStudent(int num){
System.out.println("Student类的有参数实例方法参数是num=="+num);
}
public void methodStudent10(MyClass mc){
System.out.println("Student类的有参数实例方法参数是mc=="+mc);
mc.myclassid=1000222;
mc.method();
mc.staticMethod();
}
public static void staticMethodStudent(int num){
System.out.println("Student类的有参数类方法参数是num=="+num);
}
public static void staticMethodStudent10(MyClass mc){
System.out.println("Student类的有参数类方法参数是mc=="+mc);
}
}
package com.click369.test.demo3;
public class MyClass {
public int myclassid=1001;
public static String myclassname="网星软件";
public void method(){
System.out.println("MyClass类的实例方法");
}
public static void staticMethod(){
System.out.println("MyClass类的类方法");
}
}
package com.click369.test.demo3;
public class TestMain {
public static void main(String[] args) {
//通过Student类中有参数构造方法创建对象
Student stu1= new Student(100);
int a=200;
Student stu2= new Student(a);
//创建对象
Student stu=new Student();
stu.methodStudent(200);
stu.methodStudent(a);
Student.staticMethodStudent(100);
Student.staticMethodStudent(a);
//上面的这个方法所传递的参数的数据是具体的某一个数据值。
MyClass mc=new MyClass();
Student stu3=new Student(mc);
Student stu4=new Student(new MyClass());
stu3.methodStudent10(mc);
Student.staticMethodStudent10(mc);
//mc--是MyClass类型变量,这个变量中保存的是new MyClass()类的对象的内存地址--引用
}
}
1.除过构造方法,其他的方法是不能去掉方法返回值部分。
2.方法如果没有返回值要使用void代替,如果方法有返回值那么这个方法的最后一句话一定是return xxx。
口诀:给什么,收什么
给什么:方法的返回值类型
收什么:定义符合方法的返回值类型的变量来保存数据
例如:
package com.click369.test.demo4;
public class Student {
public int studentMethod(int num){
return num;
}
public String studentMethod(MyClass mc){
return mc.myclassname;
}
public static MyClass staticStudentMethod(){
return new MyClass();
}
}
package com.click369.test.demo4;
public class MyClass {
public int myclassid=1001;
public static String myclassname="网星软件";
public void method(){
System.out.println("MyClass类的实例方法");
}
public static void staticMethod(){
System.out.println("MyClass类的类方法");
}
}
package com.click369.test.demo4;
public class TestMain {
public static void main(String[] args) {
Student stu=new Student();
int a=stu.studentMethod(1000);
System.out.println("a=="+a); //a==1000
MyClass mc=new MyClass();
String str=stu.studentMethod(mc);
System.out.println("str=="+str); //str==网星软件
MyClass mc1=Student.staticStudentMethod();
}
}