当前位置:   article > 正文

Java---类和方法的再学习

Java---类和方法的再学习

        上一篇主要介绍了面向对象的思想以及内存实现,关于类与对象感觉写的不够好,因此才会有这一篇作为补充;


        一:类与对象
 

(1)类

一些相同属性和行为的事物的统称,比较广泛、抽象,比如人类,动物类,鸟类;

含有属性和行为(可以有其中一个,也可以都有),属性一般用来描述对象的特征,行为用来描述对象可以干什么。

比如动物类中有一个对象:狗;        属性:狗有名字,体重;        行为:狗会吃饭,睡觉;

在Java中,先有类再有对象的;

  1. public class ClassAnimal {
  2. /*
  3. 属性:狗有名字,体重;
  4. 行为:狗会吃饭,睡觉;
  5. */
  6. //成员变量(属性)
  7. }

(2)属性:(成员变量)

属性:狗有名字,体重;    

  权限修饰符 数据类型 变量名(一般不对变量名赋值,毕竟对象的属性一般不相同);

如:public String name ;  // 名字属性

后面我们再说说 权限修饰符 的事情;

  1. public class ClassAnimal {
  2. /*
  3. 属性:狗有名字,体重;
  4. 行为:狗会吃饭,睡觉;
  5. */
  6. //成员变量(属性)
  7. public String name;
  8. public int weight;
  9. }

(3)  行为:(成员方法)

行为:狗会吃饭,睡觉;

我们先了解基本的行为的创建:权限修饰符  返回值类型 方法名

无返回值类型无形参列表:

      public void eat ( ) {

        System.out.println( " 爱吃骨头头 " ) ;

}

  1. public class ClassAnimal {
  2. /*
  3. 属性:狗有名字,体重;
  4. 行为:狗会吃饭,睡觉;
  5. */
  6. //成员变量(属性)
  7. public String name;
  8. public int weight;
  9. //成员方法(行为)
  10. public void eat(){
  11. System.out.println("爱吃骨头头");
  12. }
  13. public void sleep(){
  14. System.out.println("睡觉睡得死");
  15. }
  16. }

(4)对象:

类的具体表现,用于调用类的 属性 和 行为 ;

对象的创建:类名  对象名 = new 类名();

如:ClassAnimal dog = new ClassAnimal ( ) ;

可以仿照 Scanner 的用法,毕竟都是引用类型 : Scanner scn = new Scanner ( ) ; 

如果类与对象不在同一包下,第一步需要导包:import  包名 . 类名

  1. public class dog {
  2. public static void main(String[] args) {
  3. ClassAnimal dog=new ClassAnimal();
  4. }
  5. }

对象调用类的属性和方法:对象名 .

  1. public class dog {
  2. public static void main(String[] args) {
  3. ClassAnimal dog=new ClassAnimal();
  4. dog.name="大黄";
  5. dog.weight=50;
  6. dog.eat();
  7. dog.sleep();
  8. System.out.println(dog.name+"\t"+dog.weight);
  9. }
  10. }
  1. C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=13016:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo dog
  2. 爱吃骨头头
  3. 睡觉睡得死
  4. 大黄 50
  5. 进程已结束,退出代码0

(5)注意事项

类的 属性 和 行为 在 main 方法外创建 ;

成员变量有默认值,规则与数组相同;

二:案例演示

        定义一个手机类,有 颜色,品牌,价格的属性,有打电话,发消息的行为,创建对象并调用;

 如下,为定义的手机类:

  1. public class ClassPhone {
  2. //成员变量:颜色,品牌,价格
  3. public String color;
  4. public String brand;
  5. public int price;
  6. //成员方法:打电话,发消息
  7. public void call(String who){
  8. System.out.println("给"+who+"打电话");
  9. }
  10. public void message( ){
  11. System.out.println("总爱发消息!");
  12. }
  13. }

         如下,为创建的类的对象,并进行调用;可以看出,成员变量的默认值符合数据类型的默认值的规则;

  1. public class phone {
  2. public static void main(String [] args){
  3. //创建对象
  4. ClassPhone c=new ClassPhone();
  5. System.out.println(c.brand);//null
  6. System.out.println(c.color);//null
  7. System.out.println(c.price);//0
  8. System.out.println(" ");
  9. c.brand="huawei";//华为
  10. c.color="black";//黑色
  11. c.price=6999;//6999
  12. System.out.println(c.brand);
  13. System.out.println(c.price);
  14. System.out.println(c.color);
  15. c.call("刘备备");
  16. c.message();
  17. }
  18. }

 (2)两个对象使用同一个类;

两个对象互不干扰;

  1. public class phone {
  2. public static void main(String [] args){
  3. //创建对象
  4. ClassPhone c=new ClassPhone();
  5. c.brand="huawei";//华为
  6. c.color="black";//黑色
  7. c.price=6999;//6999
  8. System.out.println(c.brand);
  9. System.out.println(c.price);
  10. System.out.println(c.color);
  11. c.call("刘备备");
  12. c.message();
  13. System.out.println(" ");
  14. //再次创建对象
  15. ClassPhone c1=new ClassPhone();
  16. c1.brand="小米";//华为
  17. c1.color="blue";//黑色
  18. c1.price=5999;//6999
  19. System.out.println(c1.brand);
  20. System.out.println(c1.price);
  21. System.out.println(c1.color);
  22. c1.call("曹操");
  23. c1.message();
  24. }
  25. }
  1. C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=6083:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo phone
  2. huawei
  3. 6999
  4. black
  5. 给刘备备打电话
  6. 总爱发消息!
  7. 小米
  8. 5999
  9. blue
  10. 给曹操打电话
  11. 总爱发消息!
  12. 进程已结束,退出代码0

 (3)两个引用指向同一个对象

将 c 的地址赋给 c1,因此 c1 根据地址找到 c 的属性;

  1. public class phone {
  2. public static void main(String [] args){
  3. //创建对象
  4. ClassPhone c=new ClassPhone();
  5. c.brand="huawei";//华为
  6. c.color="black";//黑色
  7. c.price=6999;//6999
  8. System.out.println(c.brand);
  9. System.out.println(c.price);
  10. System.out.println(c.color);
  11. c.call("刘备备");
  12. c.message();
  13. System.out.println(" ");
  14. //再次创建对象
  15. ClassPhone c1=c;
  16. System.out.println(c1.brand);
  17. System.out.println(c1.price);
  18. System.out.println(c1.color);
  19. c1.call("曹操");
  20. c1.message();
  21. }
  22. }
  1. C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=6228:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo phone
  2. huawei
  3. 6999
  4. black
  5. 给刘备备打电话
  6. 总爱发消息!
  7. huawei
  8. 6999
  9. black
  10. 给曹操打电话
  11. 总爱发消息!
  12. 进程已结束,退出代码0

三:使用对象作为方法的参数

当一个对象作为形参传递给方法时,传递的是对象的地址;

  1. public class phone {
  2. public static void main(String [] args){
  3. //创建对象
  4. ClassPhone c=new ClassPhone();
  5. c.brand="huawei";//华为
  6. c.color="black";//黑色
  7. c.price=6999;//6999
  8. //调用方法
  9. method(c);
  10. }
  11. public static void method(ClassPhone c){
  12. System.out.println(c.brand);
  13. System.out.println(c.color);
  14. System.out.println(c.price);
  15. c.message();
  16. }
  17. }

四:使用对象作为方法的返回值类型

  1. public class phone {
  2. public static void main(String [] args){
  3. //赋值调用
  4. ClassPhone cc=method();
  5. System.out.println(cc.price);//调用
  6. System.out.println(cc.brand);//调用
  7. System.out.println(cc.color);//调用
  8. cc.call("刘备"); //调用方法
  9. cc.message(); //调用方法
  10. }
  11. //方法的返回值类型为 对象
  12. public static ClassPhone method( ){
  13. //创建对象
  14. ClassPhone c=new ClassPhone();
  15. c.brand="小米";
  16. c.price=3999;
  17. c.color="红色";
  18. return c;
  19. }
  20. }
  1. C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=8352:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo phone
  2. 3999
  3. 小米
  4. 红色
  5. 给刘备打电话
  6. 总爱发消息!
  7. 进程已结束,退出代码0

五:局部变量与成员变量

(1)位置不同:

成员变量定义在 main 方法中 ,局部变量定义在方法中;

  1. public class Extend {
  2. public static void main(String[] args) {
  3. String name;//全局变量
  4. }
  5. public void method(){
  6. int a=20;//局部变量
  7. //System.out.println(a);
  8. }
  9. }

(2)作用域不同:

成员变量在整个类中都可以使用,局部变量只能在该方法内使用;

  1. public class Extend {
  2. public static void main(String[] args) {
  3. int age=100;//全局变量
  4. System.out.println(age);
  5. method();//无法调用
  6. }
  7. public void method(){
  8. int a=20;//局部变量
  9. System.out.println(a);
  10. }
  11. }

(3)默认值不同

局部变量在栈内存中,无默认值,必须赋值才能使用;

成员变量在堆内存中,默认值的规则与数组相同;

(4)生命周期不同

局部变量随方法的入栈而创建,随方法的出栈而消失;

成员变量随随对象的创建而产生,随着对象被垃圾回收而消失;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/543938
推荐阅读
相关标签
  

闽ICP备14008679号