1. 定义

类:把某一类事物的属性提取出来,形成类,类有属性(也叫成员变量/field字段)和行为

对象:一个具体的实例

注意:从类到对象的说法:1)创建一个对象2)实例化一个对象3)把类实例化

成员方法的定义

public 返回数据类型 方法名 (形参列表){//方法体

语句;

return语句;//可有可无,void不需要

}

注意:

1. 形参列表:表示成员方法输入,如cal(int n),getSum(int n1,int n2)

2. 返回数据类型:表示成员方法输出,void表示没有返回值

入门案例:小杨养猫问题

 //实例化一只猫//new Cat()创建一只猫//Cat cat1=new Cat();把创建的猫赋值给cat1Cat cat1=new Cat();cat1.name="小红";cat1.age=423;cat1.color="红色";Cat cat2=new Cat();cat2.name="小嗨";cat2.age=45;cat2.color="蓝色";//如何访问对象的属性System.out.println("第一只猫:"+cat1.name+" "+cat1.age+" "+cat1.color);
}
}
class Cat{//定义一个猫类,里面可以放属性和行为//属性,可以是基本数据类型也可以是引用类型(对象、数组)String name;int age;String color;
}

2. 对象在内存中的存在形式

对象和数组都是引用类型(引用地址)

类首先把属性信息加载到方法区

然后开始分配空间,类是引用数据类型,引用的地址在堆中

然后分配不同的空间,如果是字符串(字符串也是引用类型),地址指向常量池;如果是基本数据类型就放在堆中

最后把地址返回给cat

属性

3. 属性的注意事项

1)属性的定义语法和变量相同:访问修饰符 属性类型 属性名

2)属性的类型可以是任意类型,包含基本类型和引用类型

3)属性如果不赋值,默认值的规则同数组

int 0;short 0;byte 0;long 0;float 0.0;double 0.0;char \u0000;boolean false;String null

4. 创建对象的两种形式

1)先声明再创建

Cat cat;

cat = new Cat();

2)直接创建

Cat cat=new Cat();

5. 对象分配机制(赋值)

执行Person p1=new Person();

首先加载类信息(属性信息、方法信息)

然后在堆里面开空间,有空间就一定有地址,0x0011

因为有两个属性,所以空间中应该有两个存放属性的位置

因为还没有执行到赋值语句,所以此时空间里存放的是默认值0和null

然后把地址返回给栈中的p1

执行p1.age=10;

p1从地址找到默认值0并修改为10

执行p1.name="小明"

字符串常量放在常量池中,小明的地址是0x0022,回填到堆中

执行Person p2=p1;

p2开辟一个新的空间,然后把p1的地址0x0011复制粘贴过来,p1和p2指向堆里面同一个空间

Java内存结构分析

栈:存放基本数据类型(局部变量)

堆:存放对象(Cat cat,数组等)

方法区:常量池(常量,如字符串),类加载信息

方法

1. 入门案例

添加speak方法,输出我是阿屎

//先创建对象,然后调用Person p1=new Person();p1.speak();
}
}
class Person{public void speak(){//public表示方法是公开的//void表示方法没有返回值//speak():speak是方法名,()是形参列表System.out.println("我是阿屎");}
}

2.1-定义一个方法计算1-1000相加的和

Person p1=new Person();p1.cal01();}
}class Person{
public void cal01(){int sum=0;for(int i=1;i<=1000;i++){sum+=i;}System.out.print(sum);}
}

2-2. 接收一个n,计算1-n相加的和

Person p1=new Person();p1.cal02(5);//把5传入n}
}class Person{
public void cal02(int n){//有一个形参n,可以接收用户输入int sum=0;for(int i=1;i<=n;i++){sum+=i;}System.out.print(sum);}
}

2-3. 计算两个数的和

    Person p1=new Person(); int returnSum=p1.getSum(10, 20);//定义一个变量returnSum来接收方法返回的值System.out.println(returnSum);//如果不接收的话无法显示}
}class Person{//int:表示方法执行后,返回一个int值//(int n1,int n2)形参列表,两个形参,可以接收用户输入的2个数//return sum表示把sum的值返回public int getSum(int n1,int n2){int sum=n1+n2;return sum;}
}

2-4 巧妙遍历二维数组

 int arr[][]={{1,2,3},{4,5,6},{6,65}};Mytools tool=new Mytools();tool.printArr(arr);}
}
class Mytools{public void printArr(int arr[][]){for(int i=0;i<arr.length;i++){for(int j=0;j<arr[i].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();}}
}

3. 方法的调用机制(以2-3为例)

首先在栈中开辟一个空间,叫main栈(自己起的,理解方便)

执行Person p1=new...        new完过后在堆中产生一个对象,指向

执行int returnSum=...        ,先执行右边然后赋值给左边,执行p1.getSum时又在栈中开辟一个独立的空间,叫getSum栈(自己起的),指向,跳转到对应的方法getSum,按照顺序对应关系把10、20分别赋值给n1、n2,接着执行sum=n1+n2

执行return sum,getSum栈中的return sum会返回main栈中int returnSum=...中的p1.getSum(10,20),把30赋给returnSum,释放getSum空间,回到main栈

执行system.out...

4. 成员方法的好处

①提高代码的复用性

②可以将实现的细节封装起来,然后由其他用户调用

5. 方法使用细节

//细节1:一个方法返回值只有一个,但是如果想得到多个结果,可以通过返回数组的方式来实现
//输出两个数的和和差Details d1=new Details();int arr[]=d1.resNum(4, 3);System.out.println("和:"+arr[0]);System.out.println("差:"+arr[1]);}
}
class Details{public int[] resNum(int n1,int n2){int getNum[]=new int[2];getNum[0]=n1+n2;getNum[1]=n1-n2;return getNum;}
}
//细节2:如果方法要求有返回数据类型,则方法体中最后执行额语句必须为return,且返回值类型和return值类型一致或兼容public double f1(){
n1=100;
return n1;//可以,因为发生了int→double的自动类型转换
}public int f1(){
double n2=1.1;
return n2;//不可以,因为需要强转
}
//细节3:方法不能再嵌套public void f1(){//错误public void f2(){}
}
//细节4:同一个类中的方法之间相互调用,不需要创建对象,直接调用即可A a=new A();a.sayOk();}
}class A{public void print(int n){System.out.println("print方法被调用 n="+n);}public void sayOk(){print(10);System.out.println("继续执行sayOK");//先调用print方法,执行完后再继续执行sayOK方法}
}
//细节5:跨类中的方法A类调用B类方法,需要通过对象名调用public static void main(String args[]){
A a=new A();
a.m1();
}
class A{public void m1(){System.out.println("A中的方法m1被调用");B b=new B();b.m();System.out.println("A中的m1结束执行");}
}
class B{public void m(){System.out.println("B中的方法m被调用");}
}//输出结果
A中的方法m1被调用
B中的方法m被调用
A中的m1结束执行

6. 方法练习题

思路:1方法的返回类型        2方法名        3形参        4方法体

(1)编写类AA,有一个方法:判断一个数是奇数还是偶数,返回boolean

AA a=new AA();if(a.judge(90)){System.out.println("奇数");}else{System.out.println("偶数");}}
}class AA{public boolean judge(int n){
//      if(n%2==0){
//          return true;
//      }else{
//          return false;
//      }return n%2!=0?true:false;//等价于上边的if-else语句}
}

(2)根据行、列、字符打印,对应行数和列数的字符,比如4行4列字符#

####

####

####

####

AA a = new AA();a.print(4, 4, '#');}
}class AA{public void print(int row,int col,char c){for(int i=0;i<row;i++){for(int j=0;j<col;j++){System.out.print(c+" ");}System.out.println();}}
}

7. 方法传参机制

1.基本数据类型的值传递

结论:基本数据类型,传递的是值,形参的任何改变不影响实参

2. 引用类型的值传递

结论:引用类型传递的是地址,可以通过形参影响实参

3. 方法返回类型是引用类型应用实例

编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。克隆对象

*要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同

Person p=new Person();p.name="赵";p.age=10;MyTools tools=new MyTools();Person p2=tools.copyPerson(p);System.out.println("p的属性"+p.name+"\t"+p.age);System.out.println("p2的属性"+p2.name+"\t"+p2.age);System.out.println(p==p2);//如果相同返回true,否则返回false}
}
class Person{String name;int age;
}class MyTools{public Person copyPerson(Person p){Person p2=new Person();p2.name=p.name;p2.age=p.age;return p2;}
}

类和对象,属性和方法相关推荐

  1. java类与对象(属性,方法)的使用

    ---恢复内容开始--- 类和对象是java编程中很重要的应该面向对象的一课,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语言的基础 ...

  2. JavaScript 访问对象属性和方法及区别

    这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...

  3. java mocked,JMockit 中被 Mocked 的对象属性及方法的默认值

    前脚研究完 Mockito 中被 Mocked 的对象属性及方法的默认值, 虽然目今更多的是拥抱着 Mockito, 但总有时对 JMockit 也会挤眉弄眼,谁叫 JMockit 无所不能呢!被 M ...

  4. moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...

  5. Python_Task07:类、对象与魔法方法

    类.对象与魔法方法 学习教程 类与对象 1. 对象 = 属性 + 方法 2. self 是什么? 3. Python 的魔法方法 4. 公有和私有 5. 继承 6. 组合 7. 类.类对象和实例对象 ...

  6. JavaScriptjQuery.document对象属性和方法

    document对象属性和方法 document对象代表浏览器当面窗口或标签中载入的页面. 它的常用属性有: 属性                                           ...

  7. 04-doucument对象属性和方法

    04-doucument对象属性和方法 由节点组成 1.元素节点: html body div button 2.文本节点:展示的内容<div>...</div> 3.属性节点 ...

  8. JavaScript之Ajax-1 Ajax(Ajax原理、Ajax对象属性和方法)

    一.Ajax原理 Ajax简介 - Asynchronous JavaScript And Xml 异步的 JavaScript 和 Xml - Ajax 是一种用来改善用户体验的技术,其实质是,使用 ...

  9. JavaScript对象属性及方法

    JavaScript对象属性及方法 1.对象属性 JavaScript对象时属性变量的容器,以键值对name:value的形式存在,访问方式为 name.value name[value] 2.对象方 ...

  10. Mockito 中被 Mocked 的对象属性及方法的默认值

    在 Java 测试中使用 Mockito 有段时日了,以前只是想当然的认为 Mock 的对象属性值和方法返回值都是依据同样的规则.基本类型是 0, 0.0, 或 false, 对象类型都是 null, ...

最新文章

  1. Python 绘图与可视化 matplotlib 制作Gif动图
  2. Python中常用的内值方法
  3. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
  4. 中国电梯行业运行前景与品牌竞争分析报告2022版
  5. 上传第三方jar包到nexus
  6. java input回车,用java怎样编写加减乘除,从键盘输入,例如:1+2按回车得到
  7. linux 权限提示信息,命令行快速提示:权限进阶 | Linux 中国
  8. mysql innodb数据结构_Mysql InnoDB数据结构
  9. 网站导航(站点地图)
  10. Databinding在自定义ViewGroup中如何绑定view
  11. u8转完看不到菜单_用友U8软件菜单和导航有功能不能正常显示,如何解决?
  12. ipa文件反编译_苹果ipa文件中信息的提取与加密文件的反编译
  13. Unity UGUI屏幕自适应
  14. [乡土民间故事_徐苟三传奇]第十二回_歪拐差役苦挑石磨
  15. REVIT建模如何 一键生成局部三维视图
  16. SENet代码复现+超详细注释(PyTorch)
  17. 时刻盯着手机的人,却没有近视一说,就是因为这两个小秘诀(公益分享类文章)
  18. UIView 的部分圆角的设定
  19. Jquery的parent和closet方法
  20. shell脚本编写监控本机内存和硬盘剩余空间,剩余内存小于 500M、根分区剩余空间小于 1000M时,发送报警邮件给 root 管理员

热门文章

  1. python读取tsv文件_Python读取tsv文件和evalu
  2. 亲身测评趣趣abc英语,揭露机构的优缺点!
  3. Unity3D 屏幕点击特效
  4. 第二节 物料清单(BOM)
  5. 【小沐学NLP】Python实现聊天机器人(ELIZA)
  6. 易语言选单选框分组框API全选取消
  7. 做自然语言的LSK 说要从哲学层面去解决语义分析问题
  8. net-snmp开发代理常见问题解决方案
  9. 乐优商城之后台管理系统
  10. 学习QT之调色板(QPalette)