java基础内容笔记--类和对象

【注意,本人小白一个,以下是个人根据教程的理解,如有疑惑,出错的地方,希望大家能够留言指出来,相互学习进步。】

java是一门面向对象的语言,有一个重要的实现是“万物皆为对象”,

首先

什么是类,根据网上的资料的了解,我认为,类是一个大的,概括一个对象的名称,比如说人“类”,猴“类”......

这个人“类”里面有男人、女人。

什么是对象,而人“类”中的男人、女人都是人“类”的对象,每个对象都有自己的状态和行为,比如说:男人有胡子,声音粗狂等等,行为有:吃饭、睡觉、跑步等等,女人也大同小异,

类的一般形式如下。

class 类名{
类型 实例变量名;
类型 实例变量名;
……
类型 方法名(参数){
//方法内容
}
……
}

例子:

class Human
{
//声明各类变量来描述类的属性
String name;
String sex;
int age;
String addr;
void work(){
    System.out.println("我在工作");
}
void eat(){
    System.out.println("我在吃饭");
  }
}

对“类”的使用权限申明有四个关键字


类中的方法(行为)在返回类型上有两种区别,一种是没有返回值的,没有返回值的用void来修饰,另一种是有返回值的,有返回值的要注意,返回值的类型和定义方法的类型是要相同的。

没有返回值的方法:

void eat(){
    System.out.println("没有返回值的方法吃");//方法体
}

有返回值的方法:

public String retrunString(){
    string eat="有返回值的方法吃";//方法体
return eat;//返回值
}

如果要给方法传递参数,那要在方法中写入接受参数:

类型 方法名(参数类型 参数 1,参数类型 参数 2…){
//方法体
}

例子:

class Human {
	String name;
	String sex;
	int age;
	String addr;

	void work() {//无返回值的方法
		System.out.println("我在工作");
	}

	void eat() {
		System.out.println("我在吃饭");
	}

	// 定义一个方法,返回值为 String 类型
	String getState(int time) {//有返回值的方法,并且是带有参数的方法
		String state = null;
		if (time >= 0 && 24 >= time) {
			if (time > 8 && time < 17)
				state = "我在工作";
			else if (time > 17 && time < 22)
				state = "我在学习";
			else if (time > 22 || time < 7)
				state = "我在睡觉";
		} else
			state = "错误的时间";
		return state;//返回值的类型和方法的类型是一样的(state的类型是string,方法getState类型也是string)
	}
}

public class MethodDemo {
	public static void main(String[] args) {
		Human wangming = new Human();
		// 设定对象的属性值
		wangming.name = "王明";
		wangming.age = 25;
		wangming.sex = "男";
		wangming.addr = "中国北京";
		System.out.println(wangming.name + "晚上 23 点钟你在干嘛");
		// 调用 getState()方法,把返回值打印出来
		System.out.println(wangming.getState(23));
		System.out.println("下午 15 点呢");
		System.out.println(wangming.getState(15));
	}

}

程序的运行结果如下。

王明晚上 23 点钟你在干嘛
我在睡觉
下午 15 点呢

我在工作

说到带有参数的方法,就要说方法的另一种特性-----方法的重载

方法的重载在我看的书籍上说的也通俗易懂,原文是:

【在 Java 中支持有两个或多个同名的方法,但是它们的参数个数和类型必须有差别。这种
情况就是方法重载(overloading)。重载是 Java 实现多态的方式之一。
当调用这些同名的方法时,Java 根据参数类型和参数的数目来确定到底调用哪一个方法,

注意返回值类型并不起到区别方法的作用。】

我个人理解的是,方法就是一个人的行为,就拿吃东西这个行为做为比喻,吃东西有很多中的方式,我们平常吃东西都是用筷子来吃东西,这个筷子就是方法中的参数,但是吃不同的东西用的工具(参数)也就不一样了,吃牛排用刀叉,吃意大利面就用叉子等等,但是有个不变的是,发起吃东西这个行为的是同一个人(方法名相同),所以是根据不同的需求(参数)来完成不同的事情(调用不同参数的方法,方法名相同)

public class OverloadDemo {
	// 定义一系列的方法,这些方法的参数是不同的,通过参数来区别调用的方法
	void method() {
		System.out.println("无参数方法被调用");
	}

	void method(int a) {
		System.out.println("参数为 int 类型被调用");
	}

	void method(double d) {
		System.out.println("参数为 double 方法被调用");
	}

	void method(String s) {
		System.out.println("参数为 String 方法被调用");
	}

	public static void main(String args[]) {
		OverloadDemo ov = new OverloadDemo();
		// 使用不同的参数调用方法
		ov.method();
		ov.method(4);
		ov.method(4.5D);
		ov.method("a String");
	}
}

程序的运行结果是:

无参数方法被调用
参数为int类型被调用
参数为double方法被调用
参数为String方法被调用

这里有个特殊的情况,当参数类型不完全匹配时候,java的自动类型转换会起作用。

例子:

public class OverloadDemo2 {
	void method() {
		System.out.println("无参数方法被调用");
	}

	void method(double d) {
		System.out.println("参数为 double 方法被调用");
	}

	void method(String s) {
		System.out.println("参数为 String 方法被调用");
	}

	public static void main(String args[]) {
		OverloadDemo2 ov = new OverloadDemo2();
		ov.method();
		ov.method(4);
		ov.method(4.5D);
		ov.method("a String");
	}
}

这个例子和上一个例子是基本相同,只是去掉了参数为int类型的方法,运行结果是:

无参数方法被调用
参数为double方法被调用//原本是参数为int的方法被调用
参数为double方法被调用
参数为String方法被调用
当调用 method(4)时候找不到 method(int),Java 就找到了最为相似的方法 method(double)。
这种情况只有在没有精确匹配时才发生。

对象

java是万物皆为对象,要想创建一个对象,并未使用,根据我看到教程上说,分成你爱那个步骤,第一个步骤,声明这个类的类型的变量,这个变量不是对象本身,而是用过它可以引用一个实际的对象(个人理解为代理人员),然后获得一个类的实例对象把它赋值给这个变量,通过new运算符完成的,而new运算符实际上只是为这个对象分配一个内存空间。

Human wangming;
wangming=new Human();
解读:第一行声明一个 Human 类的变量 wangming,第二行通过 new 运算符获得一个对象实例
并为其分配内存,获得对象实例赋值给 wangming。上面的过程可以合并为一个语句。

上面的也可以写成一串代码:

Human wangming=new Human();

如何使用对象所包含的状态和行为,是通过“.”来实现调用状态和行为。

wangming.eat();

例子:

public class HumanDemo {
	public static void main(String args[]) {
		// 创建一个对象
		Human wangming;
		wangming = new Human();
		// 对对象的实例变量赋值
		wangming.name = "王明";
		wangming.age = 25;
		wangming.sex = "男";
		wangming.addr = "中国北京";
		System.out.println("姓名: " + wangming.name);
		System.out.println("性别:" + wangming.sex);
		System.out.println("年龄:" + wangming.age);
		System.out.println("地址:" + wangming.addr);
		System.out.println("在干什么?");
		wangming.eat();//调用方法
	}
}

运行的结果是:

姓名: 王明
性别:男
年龄:25
地址:中国北京
在干什么?
我在吃饭

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值