疯狂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)是否有返回值(不能有返回值)
类可用于做什么?
- 定义变量
所有类,都是引用类型。
所有类,都可用于声明变量 - 调用static修饰方法或static修饰的变量
- 创建对象
- 派生子类
类是引用类型
数组,也是引用类型
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);
}
}
。。。
对象可用于做什么?
- 调用无static修饰的成员变量。
- 调用无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进行区分。
方法详解:
★方法的属性:
–方法类似于函数。但与函数不同的是,方法不能独立存在,方法必须定义在类里面。
–定义在类中的方法。从逻辑上来看,
- 如果该方法有static修饰,该方法属于类本身,应该用类调用
- 如果该方法无static修饰,该方法属于对象本身
–方法不能独立执行
方法一定要有调用者。
【规则】如果你调用同一个类中方法,可以省略调用者,此时系统会添加默认的调用者。
如果该方法是无static的方法,添加this作为默认的调用者。