第一个小程序hello world
步骤:
1,通过class关键字定义一个类。将代码都编写到该类中。
2,为了保证该的独立运行。在类中定义个主函数。格式public static void main(String[] args)
3,保存成一个扩展名为java的文件。
4,在dos控制台中通过javac工具对java文件进行编译。
5,在通过java命令对生成的class文件进行执行。
代码如下:
class Demo//定义一个累。
{
//主函数。
public static void main(String[] args)
{
//输出语句。
System.out.println("hello haha");
}
}
if语句与switch语句
if格式
if(x>1)
{
System.out.println("yes");
}
else
{
System.out.println("a");
}
并且可以多层嵌套。
if else 结构 简写格式: 变量 = (条件表达式)?表达式1:表达式2; 被称为三元运算符。好处:可以简化if else代码。弊端:因为是一个运算符,所以运算完必须要有一个结果。
switch格式
switch(x)
{
case 3:
case 4:
..............
case 11:
System.out.println(x+"秋季");
break;
default:
System.out.println("nono");
}
if和switch区别:
如果判断的具体数值不多,而是符合byte short int char这四种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
循环语句for和while
语句格式:
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
while(判断语句)
{
执行语句;
}
注意:循环语句中定义的变量,变量有自己的作用域。对于for来讲:如果将用于控制循环的增量定义在for语句中。那么该变量只在for语句内有效。for语句执行完毕。该变量在内存中被释放。当要对某些语句执行很多次时,就使用循环结构。并且for和while可以进行互换。如果需要定义循环增量。用for更为合适。
语句嵌套形式 其实就是语句中还有语句。原理:形象说法:大圈套小圈。比如循环嵌套。例如:
for(int x=0; x<3; x++)
{
for(int y=0; y<4; y++)
{
System.out.print("*");
}
System.out.println();//只有一个功能就是换行。
}
功能效果就是打印如下:
*****
****
***
**
*
对于上面循环嵌套,外循环控制答应的行数。内循环控制的是每一行的列数。也就是一行中元素的个数。这可以实现打印长方形,或是比如九九乘法表等内容。
循环语句中还有两个语句break和continue。break:跳出循环,既是结束循环。continue:只能作用于循环结构。继续循环。特点:结束本次循环,继续下一次循环。break和continue单独存在时,下面可以有任何语句。因为都执行不到。
转义字符:通过\来转变后面字母或者符号的含义。例如\n:换行。\b:退格。相当于backspace。\r:按下回车键。window系统,回车符是由两个字符来表示\r\n。\t:制表符。相当于tab键。
注意:字符串数据和任何数据使用+都是相连接,最终都会变成字符串。
逻辑运算符
逻辑运算符用于连接boolean类型的表达式。基本运算符有:&;|;^。
1、 & : 只要两边的boolean表达式结果,有一个为false。那么结果就是false。只有两边都为true,结果为true。
2、 | : 两边只要有一个为true,结果为true。只有两边都有false,结果为false。
3、 ^ : 异或;就是和|有点不一样。当true ^ true = false;概括的说就是两边相同结果是false。两边不同结果是true。
&和&&的特点:&:无论左边是true是false。右边都运算。&&:当左边为false时,右边不运算。
|:两边都参与运算。||:当左边为true。右边不运算。
利用异或符号不借助第三变量实现两个变量值的交换,代码:n = n ^ m;m = n ^ m; n = n ^ m;
函数
为了提高代码的复用性。对代码进行抽取。将这个部分定义成一个独立的功能。方便与日后使用。java中对功能的定义是通过函数的形式来体现的。
函数定义的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,)
{
执行语句;
return 返回值;
}
注意:当函数运算后,没有具体的返回值时,这时返回值类型用一个特殊的关键字来标识。该关键字就是void。void:代表的是函数没有具体返回值的情况。当函数的返回值类型是void时,函数中的return语句可以省略不写。
如何定义一个函数呢?
1,既然函数是一个独立的功能,那么该功能的运算结果是什么先明确。因为这是在明确函数的返回值类型。
2,在明确在定义该功能的过程中是否需要未知的内容参与运算。因为是在明确函数的参数列表(参数的类型和参数的个数)。
例如:定义一个功能。完成3+4的运算。并将结果返回给调用者。
1,明确功能的结果:是一个整数的和。是在明确函数的返回值类型。
2,在实现该功能的过程中是否有未知内容参与运算,没有。明确函数的参数列表( 参数的类型和参数的个数)。
但是这样定义的函数没有任何扩展性。为了增强函数扩展性可以在进行如下思考:
1,功能结果是一个和。返回值类型是int。
2,有未知内容参与运算。有两个。这个两个未知内容的类型都是int。
代码如下:
public static int getSum(int x,int y)
{
return x+y;
}
重载
之所以对重载对这个问题写日记,主要还是参加过一个小型的面试,记得当时就问了我这个问题。可惜自己没有答出来。所以这次看视频看到这里,就专门写篇日记加强下记忆。
java允许在一个类中,多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载,编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析
1、 普通方法的重载
普通方法的重载是Java实现多态技术的重要手段,为编程带来了很多便利 。当方法同名时,为了让编译器区别他们,至少需要下面之一不同
(1) .参数个数不同
(2). 对应位置上的参数类型不同
注意:不允许参数完全相同而只是返回值不同的情况出现。无法进行编译,程序在eclips中显示错误
2 、构造方法的重载
在Java中,允许在一个类中定义多个构造方法。在创建对象时,系统会自动根据所调用的构造方法中包含的参数类型,个数,选择匹配的构造方法创建对象。
注意:(1)如果在类中没有明确定义构造方法,系统会自动调用默认的构造方法。
(2)如果指定了构造方法,则不调用默认的构造方法。
(3)如果已经指定了有参的构造方法,而又要调用无参的构造方法,则要在类中追加无参构造方法的定义。
重载的解析
当类的设计者提供了重载方法之后,类的使用者在使用这些方法时编译器需要确定调用哪一个方法,确定的唯一依据是参数列表,确定的过程被称为重载的解析。
编译器解析的步骤按照下面的顺序进行
1 根据调用的方法名,查找是否有定义好的同名方法,如果没有就会报错
2 比较形参和实参的数目是否相等,如果没有则会报错。如果有一个或多个方法符合条件,这些方法进入候选集
3 与候选集中的方法比较参数表,如果对应位置上的每个参数类型完全匹配,或者可以通过扩展转换相匹配,则该方法称为可行方法,并入可行集。若不存在可行方法,则会报错
4 在可行集中按照下面的原则选取最佳可行方法,若最佳可行方法为0 则会报错,否则最佳可行方法就是最终确定要调用的方法
获取的原则:
1 若每一个参数都可以完全匹配,它就是最佳可行方法
2若某个方法的每一个参数都不比别的方法差,且至少有一个参数比别的方法好,它就是最佳可行方法,这里的差和好是指,完全匹配要比扩展转化好,不过同样是扩展转换,仍然存在好喝差的问题,扩展转换有两条路径
byte-short-int-long-float-double
char-int-long-float-double
这两条路径中位于左边的类型都可以转换为右边的类型,不过源类型与目标类型的距离越近,则这种转化就越好。
下面练习如下