#java系列课程#变量和方法
变量
在java中,每个类中都有变量,由于java是强类型语言,所以每个变量都要有类型。
在使用变量之前,必须先声明变量的类型。类型可以是简单类型,也可以是引用类型。
按照范围划分,分为全局变量和局部变量。(局部变量更助于理解,书面应该叫成员变量)在java中全局变量和局部变量是不一样的。全局变量应用的范围是整个一个类,因此声明的位置也是紧接着类下面,和方法是一个层面的。也就是说你写的程序是一层一层的。全局变量是处于第二层。
如:
public class Niukewang{
int mianjing=10000;//这就是声明一个全局变量,和方法处于同一个层面
String daima="代码";
}
那么局部变量正好相反,处于方法的里面,出了方法他就不好使了,自动free。如果不清空的话内存会被越占越多,就会发生内存溢出,所以局部变量是自动释放的。全局变量也一样,只不过是跟着方法一起被释放。
我们就是局部变量,没有一个人可以长生不老
public class Niukewang{
int mianjing=10000;//这就是声明一个全局变量,和方法处于同一个层面
String daima="代码";
{
int m=100;//这也是局部变量,只在这个代码块起作用
}
}
那么可能会问我在代码块中重新申请局部变量能编译成功么?
如这样
public class Niukewang{
int mianjing=10000;//这就是声明一个全局变量,和方法处于同一个层面
String daima="代码";
{
int mianjing=11;//这样可以么?
}
}
肯定会出错的!一个类中不允许有一样的变量,如果想重新赋值,那可以在后面直接打上mianjing=11;
这样才叫重新赋值。
那么再来看另外一种情况
public class Niukewang{
int mianjing=10000;//这就是声明一个全局变量,和方法处于同一个层面
String daima="代码";
{
mianjing=11;//这样可以么?
}
mianjing=111;//这样也是可以的
}
再来看
public class Niukewang{
int mianjing=10000;//这就是声明一个全局变量,和方法处于同一个层面
String daima="代码";
{
int mianjing1=11;//这样可以么?
}
mianjing1=111;//这样就是不可以了!mianjing1只在那个代码块中起作用,出了这个代码块,就被自动释放了,栈就被自动释放,不存在什么mianjing1了。
再来看
public class Niukewang{
int mianjing=10000;//这就是声明一个全局变量,和方法处于同一个层面
String daima="代码";
{
int mianjing1=11;//这样可以么?
}
int mianjing1=111;//这样也是可以的,重新声明一个
}
所以说局部变量的范围只在代码块中有效,但是全局变量就是针对整个类中都有用。
public class Niukewang{
static int a=10;
public static void main(String [] args){
int a=100;
System.out.println(a);//打印100
}
}
这个是允许的
在同一范围内,局部变量不能重复命名。
在同一范围内,全局变量和局部变量命名可以重复,但是以局部变量为准。
变量总是在一个类中声明。但一个变量可能和整个类相关联,也可能只在方法体或某个程序块中起作用。
public class Niukewang{
public static void main(String [] args){
int a,b,c=100;
System.out.println(c);//打印出就是100
System.out.println(b);//这个就是有错误的,因为全局变量必须赋初始值
}
}
全局变量必须有初始值
public class Niukewang{
static int d;
public static void main(String [] args){
int a,b,c=100;
System.out.println(d);//这个就没有问题,全局变量默认初始值为0;
System.out.println(b);//
}
}
全局变量默认初始值为0;那么别的类型呢?
byte:0
int:0
float:0.0f
char:’\u0000‘
short:0
long:0l
double:0.0
boolean:false
变量的初始化
局部变量在使用之前,必须先要初始化
全局变量如果没有初始化就拿来使用,系统将会自动给他一个默认的初值
public class Niukewang{
static int b;
static boolean flag;
static char s;
public static void main(String [] args){
int a;
System.out.println(a+10);//这个结果是错误
System.out.println(b+10);//这个结果为10
System.out.println(flag);//结果为错误
System.out.println(s);//结果为空
}
}
函数,也称方法
所谓函数,就是用来解决一类问题的代码的有序组合,是一个功能模块。
语法结构
返回值 函数名 (参数类型 形式参数1,参数类型 形式参数2,。。。){
程序代码 statements;
【 return 返回值】;
}
也就是说这个返回值是可有可无的。
public class Niukewang{
public static void main(String [] args){
}
static void niu(){
}//这个返回值为空,函数名(形参),这个就是方法/函数的构成
}
public class Niukewang{
public static void main(String [] args){
}
static void niu(){
System.out.println(“你好,牛客网!”);//这个就是一个方法/函数的一个构成
}
}
但是这个时候你运行时没有任何结果的,那么如何让其有结果呢
你需要调用它的!就像宋仲基点名一样,点到谁,谁才能说话,叫到谁谁才执行任务,是一个道理
public class Niukewang{
public static void main(String [] args){
niu();
}
void niu(){
System.out.println(“你好,牛客网!”);// 这个就是一个方法/函数的一个构成
}
}
//这回才能执行
其中:
1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用
2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值
3、 方法名:定义的方法的名字,必须使用合法的标识符
4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开
根据方法是否带参、是否带返回值,可将方法分为四类:
-
无参数无返回值函数
-
无参数有返回值函数
-
有参数无返回值函数
-
有参有返回值函数
下面我们来就一个例子理解方法,那就是计算三角形的面积
public class Niukewang{
public static void main(String [] args){
getArea();
getArea2(10,20);
System.out.println(getArea3());
System.out.println(getArea4(10,20));
}
static void getArea(){// 1.无返回值,无形参
int d=10;
int h=20;
System.out.println(d*h/2);
}
static void getArea2(int d,int h){// 2.无返回值,有形参
System.out.println(d*h/2);
}
static double getArea3(){// 3.有返回值,无形参
int d=10;
int h=20;
return d*h/2;
}
static double getArea(int d,int h){// 4.无返回值,有形参
return d*h/2;
}
}
这就是函数或者方法的四种形式,你写的代码几乎都包括。
练习:圆形,梯形的面积的四种方法的代码
那么方法的命名有没有一些规范呢?
是有的!
1.使用完整描述符来准确地描述变量、字段或类。 例如,使用的名称可以是 FirstName、GrandTotal 或 Corporate Customer。虽然像 x1、y1 或 fn 这样的名称较短容易输入,但是它们并不提供任何信息指出它们所代表的内容。这样对代码的理解、维护和增强会造成一定困难。
2.使用适用于领域内的术语。 如果您的用户将他们的客户称为顾客,则对这个类使用术语Customer来代替Client。许多开发人员曾经犯了这样一个错误:当业界或领域中已存在更贴切的术语时,他们还冥思苦想,准备为一些概念创建通用术语。
3.巧妙节俭地使用缩写。 这表示您应该维护一份标准短格式(缩写)的列表,应该明智地选择它们,并在使用时保持一贯性。例如,如果要使用字 arithmetic 的短格式, 选择 ar、ari 或 art 中...
后续会说出一些常见的编程风格~
常见的错误:
-
直接在类下面就写执行语句了,正确的是一定要写在主方法里
-
方法前面不写static,正确的是要写
-
形参有了,下面还要再声明变量,正确的是形参是外部送入值,不是你再声明
-
有返回值的,调用发放以为直接就有结果,正确的是要打印出来才能有结果
-
形参不能赋初始值
函数的调用
求三角形面积的就是里面形参的传递
int area=getArea(2,6);
| |____
void getArea(int h,int d);
基本类型变量的值传递
public class Niukewang{
static int a;
public static void ok(int b){
int a=0;
b=b\2;
System.out.println(b);
}
public static void main(String [] args){
int b=10;
System.out.println(a);
ok(a);
System.out.println(b);
}
}
这个的执行顺序就是执行主函数,到ok方法的时候,就去执行方法,然后再打印最后一句话。
那么现在重要的是结果,下面两行的b的结果分别是多少呢
10和5
也就是说是把a这个值传过来了,a本身没有传过来
变量的生命周期与作用域
变量都是先定义,后使用的,但是也不是在变量定义后的语句一直都能使用前面定义的变量。
就像前面说的全局变量的作用域是整个类,局部变量是就在其所在的代码块起作用
java的编程风格
方法命名
-
驼峰式:calculateScore()
-
英文单词式:delete()
变量命名
-
驼峰式:calculateScore
-
英文单词式:name
常量命名
-
下划线式:HEAD_COUNT
-
缩写大写:OI
类的命名
-
首字母大写:UserObject
-
一个首字母大写:People
数组命名
int [] a;
关于缩进,每一层都要往下依次加一个tab
关于注释
这个也是写代码的时候必须有的,因为你可能后面再看的时候你自己都忘记了,所以这个是非常必要的。注释分为三种,单行和多行都是非常非常常用的,几乎每时每刻都要用,这样也无形的为他人增加了便利