Java类和对象,及方法的使用
注意:面向对象编程(Object Oriented Programming,简称OOP)
简单地说:面向对象=对象(Object)+类(Class)+继承(Inheritance) +通讯(Communication)。
java类:把具有相同属性及方法的事物归纳为一种类别,在java中利用代码实现的一种形式。
关键字:class
(1) 类对象:类通过实例化的方式,创建一个具有独立的属性与方法的实例(类是一个模糊的概念,对象才是真正在内存中存在), 类是类对象的依据,类对象是类的实例。(面向对象容易操作,但缺点是:会产生空指针异常)
/**
* 电脑类
* 没有实例化对象前,只存在于硬盘,并没有在内存中存在
* 只有创建对象后,才会被得到内存的入口,从而进入内存
*/
public class Computer {
/**
* 属性(成员变量):对于事物的外在内容的一种描述
*/
private String color;
private double price;
private String brand;
//私有化成员,都会提供get和set方法,方便获取或修改成员的值
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
/**
* 方法:类里面特有的一些功能
* 一个java类里面只能有一个public类且类名必须与文件名一致,其中可以有n个类(不能有public关键字)
* public
* void:返回值类型(无返回值类型)
*/
//最普通的方法
public void method(){
/*方法体*/
System.out.println("颜色:"+color+",价格:"+price+",品牌:"+brand);
}
/**
* 有返回值的方法
* String表示开多大的内存给返回值
* @return
*/
public String getName(){
String name="khy";
char sex='男';
//任何的基本数据类型加上""都是字符型类型
return name+","+sex;//返回值,不能返回两个不同类型值
}
/**
* 带参数的方法
* ()里面的内容称为参数列表
*/
public void method01(String name,int price){//形参
System.out.println("传入的参数值:"+name+price);
}
}
(2) 修饰符:
- public->表示被修饰的内容是公共的,使用范围:只要能够找到且创建该对象的地方都可以被使用
无修饰符->表示不能跨工程使用(module也不行)- protected->表示被保护的,体现在继承或同一个package内的类可以相互访问
- private->表示私有化,只有自身类可以访问
- default->表示默认,使用default就相当于不添加控制访问的修饰符,它能修饰类,成员变量和方法,被default修饰的只能被同包下的类所访问
- package->包变量,可被声明它的类和同一个包中的其他类(包括派生子类)所访问,在其他包中的子类则不能访问父类中的包成员
方法的使用:
(3) void:无返回值
返回值:把该方法的运行结果,提供给其他方法使用的操作,最多只能返回一个类别的值(值,地址)(传参的方法有;值传递与地址传递)
1)值传递:传递的是值
2)地址传递:传递的是地址
public class Test02 {
public static void main(String[] args) {
//实例化对象
Computer c=new Computer();
c.setColor("橙色");
c.setBrand("华为");
c.setPrice(1000.0);
c.method();
String n="132";
int u=10;
/**
*参数传递只与数据类型有关,与变量名没有关系
* 参数传递有值传递和地址传递
*/
// c.method01(n,u);
int a=10;
method(a);
System.out.println("a1="+a);
int[] as={12,45,78,36,5,5};
method(as);//传递的是数组在内存的地址,地址里面放值已经被方法method()改变了
System.out.println("输入as="+Arrays.toString(as));
}
/**
* 方法名相同可以根据他们的参数列表去区别
* ()里面的内容称为参数列表
*/
/**
* 值传递
* 获取一次值,不能改变主类中a的值
* 只能改变方法method中a的值
*/
public static void method(int a){
a++;
System.out.println("a2="+a);
}
/**
* 地址传递
* 传递的是地址:方法可以改变地址里面的值
* @param as
*/
public static void method(int[] as){
Arrays.sort(as);
}
}
3)将类对象封装传递
public class Phone {
private String brand;
private double price;
public static void main(String[] args) {
Phone b=p();
System.out.println(b.brand);
System.out.println(b.price);
}
public static Phone p(){
Phone a=new Phone();
a.brand="小米";
a.price=12000.00;
return a;
}
}