初识java中的类和对象

多种多样的语言:
面向过程(处理规模小的问题):C
面向对象(处理规模大的问题):JAVA,C++…(一共三步:找对象,创建对 象,适用对象)

面试题: 说出oop语言的三大特征oop(Object-Oriented-…面向对象编程)
答:继承、封装、多态

类? 对象?

类就是一类对象的统称。对象就是这一类具体化的一个实例。

一个类可以实例化多个对象(用new)
一个类生成一个class(字节码文件)

类相当于模板,相当于高配的结构体
对象相当于实体

  class 类名{           属性:定义在类的内部方法的外部
	类体                行为:方法
  }
// 创建类
class <class_name>{  
    field;//成员属性
    method;//成员方法
}
// 实例化对象
<class_name> <对象名> = new <class_name>();

类的成员

类的成员可以包含以下:字段、方法、代码块、内部类和接口等

字段

class Person {
    public String name;   // 字段(这里是没有初始化的,也可以就地初始化)
    public int age;
}

使用 . 访问对象的字段.
“访问” 既包含读, 也包含写

方法 (method)

class Person {
    public int age = 20;
    public String name = "小花";
    
    public void show() {   //show方法
   System.out.println("我叫" + name + ", 今年" + age + "岁");
   }
}

如果在任何方法上应用 static 关键字,此方法称为静态方法

字段 vs 属性

我们通常将类的数据成员称为 “字段(field)” , 如果该字段同时提供了 getter / setter 方法, 那么我们也可以将它称为 "属性(property )

多种多样的代码块:

本地代码块:方法内部,不常用
实例代码块:{
        }与方法同级,作用:初始化实例数据成员,优先于构造方法执行

静态代码块:static{
          }    作用:初始化静态数据成员。优先于实例代码块,静态代码块只执行一次。

执行顺序
1.静态代码块—>实例代码块—>构造方法(与代码编写前后顺序无关)
2.如果都是静态(如静态代码块,静态数据成员),则按顺序执行(实例规则相同)

属性(成员变量)

  • 实例数据成员
;Person per = new Person( )
per.数据成员
per.方法      (此处的数据成员和方法都是实例的)

实例化一个对象之后,如何访问对象的数据成员?

:通过点号;如Person per = new person()…

  • 静态数据成员

访问静态数据成员、成员方法要通过(类名.静态数据成员/静态成员方法) 静态的数据成员和方法 不依赖于对象

方法(成员方法)

  • 实例成员方法
  • 静态成员方法

如果类中的数据成员没有初始化,默认值为对应0值;
如果是引用类型:null.;
如果是简单类型:0(char:\u000,boolen:false)

*static修饰放在方法区,静态的只有一份,不依赖于对象(静态方法内部不允许访问实例数据成员和实例成员方法)
不能直接访问,可以间接传参访问(引用)

常量放在堆里 ;
字符串常量放在常量池;
局部变量存放在栈上 ;
new创建的对象在堆上;
静态变量存放在方法区

类的成员可以包含:

  • 字段,方法,代码块(静态代码块、实例代码块、本地代码块、同步代码块);
  • 内部类(静态内部类、实例、本地、匿名)和接口等

访问修饰限定符

private实现封装
private/ public 这两个关键字表示 “访问权限控制” .(访问修饰限定符)

被 public 修饰的成员变量或者成员方法, 可以直接被类的调用者使用.
被 private 修饰的成员变量或者成员方法, 不能被类的调用者使用
体现封装性:private被private所修饰的属性或方法均不能在方法外部

通常情况下我们会把字段设为 private 属性,
但是方法是否需要设为 public, 就需要视具体情形而定.
一般我们希望一个类只提供 “必要的” public 方法, 而不应该是把所有的方法都无脑设为 public

通常情况下我们会把字段设为 private 属性, 但是方法是否需要设为 public, 就需要视具体情形而定. 一般我们希
望一个类只提供 “必要的” public 方法, 而不应该是把所有的方法都无脑设为 public.

getter和setter方法

给数据成员初始化的方式
1.提供一系列的get set方法
2.提供构造方法–》用来产生对象。(方法名与类名相同,没有返回值)

class Person { 
 private String name;
 private int age; 
 
 public void setName(String name){ 
 this.name = name;//this引用,表示调用该方法的对象
 } 
 public String getName(){ 
 return name; 
 } 
 
 public void show(){ 
 System.out.println("name: "+name+" age: "+age+"岁"); 
 } 
} 
public static void main(String[] args) { 
 Person person = new Person(); 
 person.setName("张三"); 
 String name = person.getName(); 
 System.out.println(name); 
 person.show(); 
} 
// 运行结果
张三 
name: 张三 age: 0

getName 即为 getter 方法, 表示获取这个成员的值.
setName 即为 setter 方法, 表示设置这个成员的值
不是所有的字段都一定要提供 setter / getter 方法, 而是要根据实际情况决定提供哪种方法

构造方法

构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作.

new 执行过程
1.为对象分配内存空间
2.调用对象的构造方法
规则
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)

***如果程序没有提供任何构造方法,编译器会默认生成不带参数的构造方法(这种默认会在什么构造方法都没有的情况下产生)

一个类可以有多个构造器,一个类的构造器名称必须与该类的名称一致,构造器没有返回值也不需要void.

构造方法可以发生重载(函数名相同,参数不同(类型,个数),返回值不做要求)

关于this

this.成员变量 this.成员方法 this()调用构造方法必须放在第一行,只能调用一个构造方法
this代表当前对象的引用,当调用完构造方法,对象才被真正实例化 构造器是java中创建新对象时执行的操作

面试题:生成一个对象需要几步?(即为上面说过的new 执行过程)
1.给对象分配内存,
2.调用合适的构造方法(构造方法不止一个)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值