这里写目录标题
对象在内存中的存在形式
Cat cat = new Cat(); //创建一个类
cat.name = "Tom";
cat.ages = 3;
cat.color = "yellow";
属性(成员变量)
基本介绍
- 成员变量=属性=field(字段)(成员变量是用来表示属性的)
eg:Cat(name,ages,color); - 属性是类的一个组成部分,一般是基本数据类型,也可以是引用数据类型(对象,数组);
注意事项
- 属性的定义语法与变量相同:
eg:[[访问修饰符 ]] 属性类型 属性名
访问修饰符:控制属性的访问范围 - 属性的定义类型可以是任何类型,包括基本类型和引用类型
- 属性如果不赋值,有默认值;
public class PropertiesDetail {
public static void main(String[] args) {
// 创建一个Person对象
Person p = new Person();
System.out.println("年龄:" + p.age);
System.out.println("姓名:" + p.name);
System.out.println("工资:" + p.sal);
}
}
class Person{
int age;
String name;
double sal;
boolean isPass;
}
默认值:年龄:0
姓名:null
工资:0.0
创建对象
- 先声明,在创建
Cat cat;//声明对象
cat = new Cat();//创建 - 直接创建
Cat cat=new Cat();
访问属性
对象名.属性名;
java 创建对象的流程简单分析
- 先加载person类的信息(属性和方法信息,只会加载一次)
- 在堆中分配空间,进行默认初始化
- 把地址赋给p1,p1 就指向对象
- 进行指定初始化;
成员方法
方法类似于函数
基本介绍
类除了一些属性外,还有一些行为
public class Method {
public static void main(String[] args) {
Person01 p = new Person01();
p.speak();
p.cal();
p.cal02(10);
int a=p.cal03(0,200);
System.out.println(a);
}
}
class Person01 {
String name;
int age;
public void speak() {//speak 是方法名,speak后的括号内是形参列表,
// 大括号里面是方法体,写要执行的代码
System.out.println("我是一个好人");
}
public void cal(){
int res=0;
for(int i=1;i<=100;i++){
res+=i;
}
System.out.println("1到100的和是"+res);
}
public void cal02(int n){
int res=0;
for(int i=1;i<=n;i++){
res+=i;
}
System.out.println("1到"+n+"的和是"+res);
}
public int cal03(int m,int n){
int res=0;
for(int i=m;i<=n;i++){
res+=i;
}
return res;
}
}
方法的调用机制
方法的定义
访问修饰符 返回的数据类型 方法名(形参列表){
}
注意事项
访问修饰符(作用是控制方法使用的范围)
如果不写,默认访问。(有四种:public,protected,private,默认);
- 最多有一个返回值
- 返回类型可用是任何类型,包括引用类型;
- 命名遵循小驼峰命名法;
- 调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数
- 方法不能嵌套;
调用细节
- 同一个类中的方法调用,直接调用即可;
public class MethodDetial {
public static void main(String[] args) {
A a = new A();
a.sayOk();
}
}
class A{
public void print(int n){
System.out.println("print()方法被调用 n="+n);
}
public void sayOk(){
print(10);//调用print;
}
}
- 跨类中的方法A类调用B类:需要通过对象名调用;
public class MethodDetial {
public static void main(String[] args) {
A a = new A();
a.m1();
}
}
class A{
public void m1(){
B b=new B();
b.hi();
}
}
class B{
public void hi(){
System.out.println("B类中hi()被调用");
}
}
- 跨类的方法调用和方法的访问修饰符相关
成员方法传参机制
swap函数
public class Swap {
public static void main(String[] args) {
int x = 10;
int y = 20;
SS obj=new SS();
obj.swap(x, y);
System.out.println("x = " + x + ", y = " + y);
}
}
class SS{
public void swap(int a, int b) {
System.out.println("Before swapping: a = " + a + ", b = " + b);
int temp = a;
a = b;
b = temp;
System.out.println("After swapping: a = " + a + ", b = " + b );
}
}
运行结果:
Before swapping: a = 10, b = 20
After swapping: a = 20, b = 10
x = 10, y = 20//改变的只是swap中的a,b;
克隆对象
public class CloneClass {
public static void main(String[] args) {
Person p=new Person();
p.name="mainl";
p.age=12;
MyTools tools=new MyTools();
Person p2=tools.copyPerson(p);
System.out.println("p的属性:"+"name= "+p.name+" age="+p.age);
System.out.println("p2的属性:"+"name= "+p2.name+" age="+p2.age);
System.out.println(p==p2);
}
}
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;
}
}