鱼C论坛

 找回密码
 立即注册
查看: 2894|回复: 3

[学习笔记] JAVA学习Day8【面对对象2】

[复制链接]
发表于 2020-8-17 21:22:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学习视频:https://www.bilibili.com/video/BV17J411G72L?p=20

145-159

  1. /*
  2. *方法的参数传递机制:
  3. *实参 --> 形参
  4. *(1)形参是基本数据类型
  5. *实参赋值给形参是数据值,形参值的修改不影响实参
  6. *(2)形参是引用数据类型
  7. *实参赋值给形参的是地址值,如果形参修改了对象的属性值,那么实参对象的属性值也会修改
  8. *
  9. */

  10. class Test08_01{
  11.         public static void main(String[] args){                    //图1
  12.                 int x = 1, y = 2;
  13.                 swap(x, y);
  14.                 System.out.println(x + " " + y);//并为交换

  15.         }
  16.         public static void swap(int a, int b){
  17.                 int temp = a;
  18.                 a = b;
  19.                 b = temp;
  20.         }
  21. }



  22. class Test08_02{
  23.         public static void main(String[] args){                 //图2
  24.                 Circle yuan = new Circle();
  25.                 yuan.radius = 1.0;
  26.                 doubleRadius(yuan);
  27.                 System.out.println(yuan.radius);

  28.         }
  29.         public static void doubleRadius(Circle c){
  30.                 c.radius *= 2;

  31.         }
  32. }
  33. class Circle{
  34.         double radius;
  35. }

  36. /*
  37. *方法的参数传递面试题陷阱
  38. *当形参是引用数据类型,实参给形参地址值之后,
  39. *形参修改了地址值,那么和实参就无关了
  40. */

  41. class Test08_02{
  42.         public static void main(String[] args){
  43.                 Circle yuan = new Circle();
  44.                 yuan.radius = 1.0;
  45.                 doubleRadius(yuan);
  46.                 System.out.println(yuan.radius);                     //图3

  47.         }
  48.         public static void doubleRadius(Circle c){
  49.                 c = new Circle();//新增一句后,radius不扩大两倍了
  50.                 c.radius *= 2;

  51.         }
  52. }
  53. class Circle{
  54.         double radius;
  55. }



  56. /*
  57. *方法的重载
  58. *在同一个类中,出现两个或多个名称相同,形参列表不同,称为方法的重载
  59. *
  60. *为什么要有方法的重载?为了调用方便
  61. */

  62. class Test08_03{
  63.         public static void main(String[] args){
  64.                 System.out.println(max(1, 3));
  65.                 System.out.println(max(2.0, 1.0));
  66.                 System.out.println(max(1, 3, 4));

  67.         }
  68.         //方法重载时,不去看返回值类型是否一致,只看方法名和形参列表
  69.         //public static double max(int a, int b){
  70.                 //return a > b ? a : b;
  71.         //}

  72.         public static int max(int a, int b){
  73.                 return a > b ? a : b;
  74.         }
  75.         public static double max(double a, double b){
  76.                 return a > b ? a : b;
  77.         }

  78.         public static iny max(int a, int b, int c){
  79.                 int max = a > b ? a : b;
  80.                 max = max > c ? max : c;
  81.                 return max;
  82.         }

  83. }


  84. /*
  85. *命令行参数:给main方法穿的实参(了解)
  86. */

  87. class Test08_04{
  88.         public static void main(String[] args){
  89.                 for(int i = 0; i < args.length; i++){
  90.                         System.out.println(args[i]);//从键盘重传入
  91.                 }
  92.         }
  93. }


  94. /*
  95. *可变参数:新参列表中出现了...
  96. *使用原则:(1)可以传入0-n个对应的实参,也可以传入对应数据类型的数组对象!!!!
  97. *(2)非可变参数的形参部分,原来该怎么传,现在还怎么传
  98. */


  99. class Test08_05{
  100.         public static void main(String[] args){
  101.                 System.out.println(sum(1, 3, 4));
  102.                 System.out.println(max(1, 3, 4));
  103.                 System.out.println(max());//报错
  104.         }
  105.         public static int sum(int... n){//传入任意多个 和 int sum(int[] arr)这种不能同时定义!!!
  106.                 int sum = 0;
  107.                 for(int i = 0; i < nums.length; i++){
  108.                         sum += nums[i];
  109.                 }
  110.                 return sum;
  111.         }
  112.         //int num1 是非可变参数部分
  113.         public static int max(int num1, int... nums){
  114.                 int max = num1;
  115.                 for(int i = 0; i < nums.length; i++){
  116.                         if(nums[i] > max){
  117.                                 max= nums[i];
  118.                         }
  119.                 }
  120.                 return max;
  121.         }
  122. }


  123. /*
  124. *变量的分类:
  125. *1.成员变量:这里讨论的是非静态的成员变量
  126. *2.局部变量
  127. *(1)声明的位置不同:成员在类的方法外;局部变量在{}中声明的或是在()中声明的形参
  128. *(2)运行时在内存中的位置也不同:成员变量在堆中,局部变量在栈中。
  129. *(3)初始化不同:成员变量如果没有初始化,有默认值;局部变量没有初始化,会报错、
  130. *(4)生命周期:成员变量(随着对象的创建而分配,随着对象被垃圾回收而回收)
  131. *局部变量(方法被调用,开始分配,方法执行结束就结束)
  132. *(5)可用的修饰符:成员变量(有很多,之后讲)局部变量(final,之后讲)
  133. */


  134. class Test08_06{
  135.         public static void main(String[] args){
  136.                 String ming = "张三";//局部变量
  137.                 int nian = 23;//局部变量                                     //图4

  138.                 Student s1 = new Student();//s1是局部变量
  139.                 s1.name = ming;
  140.                 s1.age = nian;
  141.         }
  142. }

  143. class Student{
  144.         String name;//成员变量(在类中的方法外)
  145.         int age;

  146.         void set(String n, int a){//n是局部变量
  147.                 name = n;
  148.                 age = a;
  149.         }
  150. }


  151. /*
  152. *对象数组!!!!!!!!!!!!!!!!!!!!!!!!!!!
  153. *
  154. */

  155. //错误写法
  156. class Test08_07{
  157.         public static void main(String[] args){
  158.                 //用一个数组,存储5个圆对象,半径分别是1-5
  159.                 Circle[] arr = new Circle[5];
  160.                 for(int i = 0; i < arr.length; i++){                         //图5
  161.                         arr[i].radius = i + 1;//null报错
  162.                 }
  163.                 for(int i = 0; i < arr.length; i++){
  164.                         arr[i].printInfo();
  165.                 }

  166.         }
  167. }

  168. class Circke{
  169.         double radius;
  170.         double getArea(){
  171.                 return 3.14 * radius * radius;
  172.         }
  173.         void printInfo(){
  174.                 System.out.println(radius + " " + getArea());
  175.         }
  176. }

  177. //正确写法
  178. class Test08_07{
  179.         public static void main(String[] args){
  180.                 Circle[] arr = new Circle[5];                           //图6
  181.                 for(int i = 0 i < arr.length; i++){               
  182.                         arr[i] = new Circle();//新增一句
  183.                         arr[i].radius = i + 1;
  184.                 }
  185.                 for(int i = 0; i < arr.length; i++){

  186.                         arr[i].printInfo();
  187.                 }

  188.         }
  189. }

  190. /*
  191. *面向对象的基本特征:
  192. *(1)封装
  193. *(2)继承
  194. *(3)多态
  195. */

  196. /*
  197. *封装:
  198. *(1)隐藏实现细节
  199. *(2)安全
  200. *封装的范围:
  201. *(1)属性的封装、方法的封装
  202. *(2)组件的封装
  203. *(3)系统的封装
  204. *封装的实现,靠权限修饰符
  205. *               本类       本包    其他包子类    任意位置
  206. *private:       1          0          0          0
  207. *缺省/省略                 1          1          0          0
  208. *protected:      1          1          1          0
  209. *public:         1          1          1          1
  210. *类、属性、方法、构造器、内部类可以加修饰符
  211. *类:缺省、public(如果类前面有public则必须与源文件名相同)
  212. *属性:四种都可以(大多数用private,私有化会提供get/set方法)
  213. *方法:四种都可以(大多数是public)
  214. *
  215. */
  216. class Test08_08{
  217.         public static void main(String[] args){
  218.                 Circle c1 = new Circle();
  219.                 c1.setRadius(1.2);
  220.                 System.out.printl(c1.getRadius());

  221.         }
  222. }

  223. class Circle{
  224.         private double radius;//仅限于本类中的访问
  225.         //radius属性的set方法,修改值
  226.         public void setRadius(double r){
  227.                 if(r > 0)radius = r;//使赋值可控
  228.         }
  229.         //radius属性的get方法,获取值
  230.         public double getRadius(){//注意命名
  231.                 return radius;
  232.         }
  233. }

  234. /*
  235. *构造器作用:(1)构造对象,创建对象  和new一起使用
  236. *(2)创建对象的同时给属性赋值
  237. *构造器的特点:(1)所有类都有构造器
  238. *(2)如果一个类没有显示声明构造器,那么编译器将会自动生成一个默认的无参构造
  239. *(3)如果一个类显示声明了构造器,那么编译器将不会自动生成默认的无参构造了
  240. *(4)构造器的名称必须与类名相同
  241. *(5)构造器没有返回值类型,不用写void!!!!!!!!
  242. *(6)构造器可以重载
  243. */
  244. class Test08_08{
  245.         public static void main(String[] args){
  246.                 //创建对象
  247.                 Circle c1 = new Circle(1.2);//创建对象的同时给属性赋值
  248.                 c1.printInfo();
  249.                 c1.setRadius(2.5);//创建对象之后,修改属性值

  250.                 Circle c2 = new Circle();
  251.                 c2.setRadius(3.6);
  252.                 c2.printInfo();

  253.         }
  254. }

  255. class Circle{
  256.         private double radius;
  257.         public Circle(double d){//有参构造
  258.                 radius = 0;
  259.         }
  260.         public Circle(){//无参构造

  261.         }
  262.         public void printInfo(){
  263.                 System.out.println(radius);
  264.         }
  265.         public void setRadius(double r){
  266.                 radius = r;
  267.         }
  268. }
复制代码

2.PNG
3.PNG
1.PNG
4.PNG
5.PNG
6.PNG

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-17 21:35:17 | 显示全部楼层
这一节需要好好复习几遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-18 00:03:48 | 显示全部楼层
这位同学我也开始学习JAVA  加个Q一起互相交流可好?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-18 00:42:43 From FishC Mobile | 显示全部楼层
mmpo789 发表于 2020-8-18 00:03
这位同学我也开始学习JAVA  加个Q一起互相交流可好?

需要交流的话可以直接在我的帖子下和我交流,最近会不定期更新Java学习内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 13:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表