疯狂java讲义05

34.类与成员变量

面向对象:Java是一门面向对象语言

:某一类对象的统称。相当于是一个概念性的(不是具体存在的东西)

对象:现实中所能接触的各种“东西”

总决:定义类、创建对象、调用方法

定义类:

[ 修饰符 ] class 类名

{
//成员变量(field)
//方法(method)
//构造器(constructor)
//内部类(nested class)
//初始化块

}-------类体

类中5大成员!
修饰符:public 、 final | abstract 。有且仅有。
类名:语法要求:只要是标识符就可以
从专业角度要求:多个单词连缀而成,每个单词首字母大写。

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

成员变量(field)

[修饰符] 类型 变量名 [=初始值];

–修饰符:private | protected | public 、final、static、 (transient: 序列化相关)。

–类型:任意基本类型或引用类型

–变量名:语法要求:只要是标识符即可。
专业角度要求:驼峰(camerlize)写法,首字母小写,后面每个单词首字母大写。
成员变量: 用于描述该类或对象的状态,因此通常建议用名词。
项目中,只定义项目感兴趣的状态。

对象的成员变量,可以不指定初始值
系统会为之分配默认的初始值,初始值规则与数组的初始值规则完全相同

【例:代码】

public final class User 
{
//成员变量(field)
//[]  方括号表示里面的  修饰符、初始值  可有可不有
//[修饰符]  类型 变量名  [ =初始值]

//  修饰符		   类型 		变量名
	private  String  name;
	
//	类型    变量名	
	int age;

//有初始化值
//	类型		变量名		初始化值	
	double salary = 3500;
	
//	修饰符		类型		变量名
	public boolean isMarried;		
}

、、、、、、、、、、、、、、、、、、、、、、

public class Role {

//成员变量(field)
//[]方括号表示里面的  修饰符、初始值  可有可不有
//[修饰符]  类型 变量名  [ =初始值]

//类型	变量名
String name;

//类型	变量名
int 	id;

//类型是int[],变量名是quanxian
	int[] 		quanxian;
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

方法(method)

[修饰符]  返回值类型  方法名(形参列表)
{
	//代码:定义变量(包括数组)、变量赋值、流程控制、数据语句
	如果声明了返回值类型,必须return语句
}-------方法体

—修饰符:private | protected | public 、final | abstract 、 static

—返回值类型:任意基本类型或引用类型。
可使用void声明没有返回值。

—方法名:语法要求:只要是标识符即可
专业角度要求:驼峰(camerlize)写法。
方法,用于描述该类或对象的行为,因此通常建议用动词。
项目中,值定义项目感兴趣的行为。

—形参列表:形参类型1 形参名,形参类型2 形参名,…
每个形参都满足“形参类型 形参名” 的格式;多个形参之间用逗号隔开。
代表调用方法时要传入的参数

//	修饰符		返回值		变量名	形参列表为空
	public	 	void    	walk()
	{
		System.out.println("user");
	}

,,,,,,,

//		修饰符		   返回值	方法名   形参类型	  形参名			(String[] args)——》形参列表	
	public static		 void	 main	(String[] 		args)

构造器(constructor)

作用:new调用构造器来创建对象

【如果你没有为类写构造器,系统会默认为该类提供一个无参数的构造器!】

[修饰符] 构造器名(形参列表)
{
//代码:定义变量(包括数组)、变量赋值、流程控制、数据语
}------构造器体

–修饰符:private | protected | public

–构造器名必须与类名相同

–不能有返回值

判断一个类是否为构造器,要看两点:
(1)构造器名与类名相同
(2)是否有返回值(不能有返回值)

类可用于做什么?

  1. 定义变量
    所有类,都是引用类型。
    所有类,都可用于声明变量
  2. 调用static修饰方法或static修饰的变量
  3. 创建对象
  4. 派生子类

类是引用类型
数组,也是引用类型
Java的引用类型非常多,无穷无尽。。。只要你定义一个类,就多了一个引用类型
引用类型的赋值,只是将对象的首地址存入变量中。

//常量:一旦赋值之后永远不会改变的值
	//常量,所有字母大写,单词之间用下划线分隔
	static int MAX_SIZE = 2000;
	
		//		修饰符		   返回值		方法名		2个int形参
		public static		 int 		add			(int a , int b )
		{
			System.out.println("减法");
			return a-b;
		}

。。。调用

import java.util.Random;

public class UserRoleTest {
public static void main(String[] args)
{
	//User是自定义的引用类型
//	User it;
	
	//面试题  是自定义的引用类型
	面试题  ms;
	
	//调用	user相当于调用主语,		把参数传给它,它就返回结果给你
	System.out.println(User.add(18, 15));
System.out.println(	a.jh(16,20)+"元");
	
//	类型		变量名
	Random  rnd = new Random();
//	add需要2个int值。第一个是50;第二个int是rnd.nextInt(40)*2表达式	
	System.out.println(	User.add(50, rnd.nextInt(3)));
//rnd.nextInt(3)取一个=>0且<3的随机数。
	
	Random a = new Random();
	System.out.println(User.add(5, a.nextInt(3)*1));
//a.nextInt(3)*2	后面的*2的作用

	int result = User.add(50, rnd.nextInt(40)*2);
	System.out.println(User.MAX_SIZE);
}
}

。。。

对象可用于做什么?

  1. 调用无static修饰的成员变量。
  2. 调用无static修饰的方法。

用对象调用
。。。
UserRoleTest2

public class UserRoleTest2 {
	public static void main(String[] args)
	{
				//构造器
	User u1 = new User("随便给个String类型");
	User u2 = new User("1");		
	//通过构造器User,new出来u1,调用里面的walk,eat.
	//(String food)往形参里面的food输入烤鸡,
	//通过System.out.println("用户正在吃:"+ food);中的返回值(void、return)返回结果-》烤鸡。
	u2.walk();
	u2.eat("烤鸡");
	u2.eat("可乐");
	
	//通过构造器Role,然后new一个对象c1调用里面的阶乘。
	Role c1 = new Role();
	
	System.out.println(c1.factorial(6));
	System.out.println(c1.a(5));
	
	面试题 q = new 面试题();
	//new一个对象q,从面试题里调用出age
	System.out.println(q.age);
	}
	}

。。。

User

public final class User 
{
//	修饰符		返回值		形参列表为空
		public void    walk()
		{
			System.out.println("该用户正在走路");
		}
		
	//	修饰符		返回值		一个String形参
		public void eat(String food)
		{
			System.out.println("用户正在吃:"+ food);
		}
		}

。。。
Role

public class Role {

//成员变量(field)
//[]方括号表示里面的  修饰符、初始值  可有可不有
//[修饰符]  类型 变量名  [ =初始值]

//类型	变量名
String name;

//类型	变量名
int 	id;

//类型是int[],变量名是quanxian
	int[] 		quanxian;
	
	//		构造器
	public Role()
	{
		System.out.println("通过构造器Role从这里调用");
	}
	
	
	public int factorial(int n)
	{
		//n的阶乘:1*2*3*4*5*...#n
		int result = 1;
		for (int i=1 ; i<=n ; i++)
		{
			result *=i;
		}
			return result;
	}
	
	public int a (int v){
		System.out.println("随便输入一个数5,由v返回结果");
		return v;
	}		
}

。。。

面试题

public class 面试题 {

int age = 20;	//成员变量
double de;
// 错误	double = de;	//成员变量
//de =3.4;		//赋值语句
public 面试题()
{
	System.out.println("这里的构造器是(面试题)");
}	
}

this引用

this可以出现非static的方法、构造器中。作用如下:

–出现非static方法中,this代表了该方法的调用者。
谁调用该方法,this就代表谁。

–出现在构造器中,this就代表该构造器正在初始化的对象。

**this.**的很重要作用是:用于区分方法或构造器的局部变量。
尤其是与成员变量同名是-----更需要使用this进行区分。

方法详解:

★方法的属性:
–方法类似于函数。但与函数不同的是,方法不能独立存在,方法必须定义在类里面。

–定义在类中的方法。从逻辑上来看,

  1. 如果该方法有static修饰,该方法属于类本身,应该用类调用
  2. 如果该方法无static修饰,该方法属于对象本身

–方法不能独立执行
方法一定要有调用者。
【规则】如果你调用同一个类中方法,可以省略调用者,此时系统会添加默认的调用者。
如果该方法是无static的方法,添加this作为默认的调用者。