走进Java
Java是一面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里面难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java现状
最近几年,Go、Python 等语言快速崛起,大有挑战 Java 地位的趋势,但是 Java 毋庸置疑仍是当前互联网行业里招聘需求量最大的。
众多大厂:阿里、美团、快手、拼多多、滴滴、网易等,都是以 Java 为公司的主语言,部分大厂:腾讯、百度、字节等,虽然以其他语言为主语言,但是多多少少也会有一些 Java 岗。
所以,Java 的现状及未来,我觉得都是比较不错的。岗位多也代表着机会多,对于新人来说比较友好,所以我个人是比较推荐新人学 Java 的。
第一个函数
相信大家刚开始学习编程的时候,都是打印Hello World!吧。
//注释 : 对代码的解释说明
//公共的 class类 类名 : 类名与文件名保持一致,类,每个单词的首字母大写
public class HelloWorld{ //类的开始
//主方法: 程序执行的入口 ,逐行执行主方法中的代码
//公共的 静态的 没有返回值的 主要的 ()->参数列表
public static void main(String[] args){ //方法开始
//系统 输出 打印 ()->输出的内容 "内容" -> 原封不动输出打印(字符串)
System.out.println("Hello World!!!"); // ; 结束语句
} //方法结束
}//类的结束
//注意: 一对{}中的内容就要缩进一个 tab键
//所有符号都是英文状态下的符号
//一个java文件中可以定义多个类,但类名不能相同
//被public修饰的类只能存在一个,要求与文件名保存一致
main方法,正如注释所说,这是程序开始执行的第一行。对于一个Java应用程序来说,main方法是必需的,Java解释器在没有生成任何对象的情况下,以main作为入口来执行程序。每个类中可以定义多个方法,但main方法只能有一个。关键字public表示访问权限,指明所有的类都可以使用这一方法。本例中,main必须被定义为public类型,因为当程序开始执行时它需要被它的类之外的代码调用。关键字static指明该方法是一个类方法。关键字void指明main()方法不返回任何值。main方法圆括号中定义的String args[]是传送给main方法的参数,参数名为args,它是类String的一个对象。方法的参数用“类名参数名”来指定,多个参数间用逗号分隔。该行的最后一个字符是“{”,它表示了main程序体的开始,一个方法中包含的所有代码都将包括在这对花括号中间。另外,main仅是解释器开始工作的地方,一个复杂的程序可能包含几十个类,但这些类仅需要一个main方法。
接下来,我们就从Java的语法开始!
1.1 注释
注释分为单行注释、多行注释和文档注释
//单行注释
/*多行注释*/
/**文档注释*/
/**
注释
作用: 对程序的解释说明
分类:
单行注释
作用域: 当前行有效
颜色: 绿色
嵌套问题: 可以嵌套单行,不可以嵌套多行和文档注释
定义位置: 行的上面,行尾
多行注释
作用域: 多行内有效
颜色: 绿色
嵌套问题: 可以嵌套单行注释,不可以嵌套多行和文档注释
定义位置: 方法上面|类的上面
文档注释
作用域: 多行内有效]
颜色: 蓝黑色
嵌套问题: : 可以嵌套单行注释,不可以嵌套多行和文档注释
定义位置: 方法上面|类的上面
多行和文档注释的区别:
1.开发工具中,方法的上面定义文档注释,会自动带有一个提示,而多行注释没有
2.多行注释的内容,会显示在生成的类的API文档中
API文档: 类的说明手册
注意:
注释的内容不会被编译
编写代码一定要养成习惯添加注释
*/
public class Demo01{
/**
主方法
程序的入口
*/
public static void main(String[] args){ //方法开始
System.out.println("Demo01");
}
}
1.2 标识符
1.2.1 标识符的概念
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符 凡是自己可以起名字的地方都叫标识符。
1.2.2 标识符的合法规则
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符 凡是自己可以起名字的地方都叫标识符。
1.2.3 Java中的一些命名规范
包名:多单词组成时所有字母都小写。 类名、接口名:多单词组成时,所有单词的首字母大写。 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写: 常量名:所有字母都大写。多单词时每个单词用下划线连接:PRIVATE_CONSTANT 例如public static final double PI=3.14; //使用final关键字修饰一个常量。
1.3 关键字
关键字又称保留字,是指Java语言中自带的用于标志数据类型或者程序构造名等的标识符,如public、double等。当定义标识符时,不要让标识符和关键字相同,否则将引起错误。
1.4 数据类型、基本数值类型、运算符
1.4.1 数据类型
1.4.2 数值类型
1.4.3 运算符
Java语言的运算符与C语言基本一致,包括算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、条件运算符和其他运算符
算术运算符
在算术运算符中,优先级最高的时单目运算符(++和--)和正负(+和-),其次时(*、/、%),最低的是加减(+、-)。因为"()"的优先级最高,所以可以通过加“()”改变表达式中各个部分的运算优先级。
接下来,我们完成一些练习,以掌握算术运算符。
public class Demo02{
public static void main(String args[]){
int i1=10;
int i2=i1++;
int i3=10;
int i4=++i3;
System.out.println("i1="+i1+"\ti2="+i2+"\ti3="+i3+"\ti4="+i4);
float f1=6.7f%3.3f;
int f2=(-13)%5;
int f3=13%(-5);
int f4=(-13)%(-5);
System.out.println("f1="+f1+"\tf2="+f2+"\tf3="+ f3+"\tf4="+f4);
}
}
关系运算符 不知道关于逻辑运算符的练习你都做对了吗
i1=11 i2=10 i3=11 i4=11
f1=0.099999905 f2=-3 f3=3 f4=-3
好,接下来我们继续理解关系运算符 关系运算符包括>、<、>=、<=、==、!=等6个运算符。 关系运算符可用于逻辑表达式或关系表达式,比较结果为boolean型数据。 boolean型数据不能强制类型转换成其他数据类型,不能在数值表达式中出现。 关系运算符(<、<=、>、>=)的运算优先级比(==、!=)高。 关系运算符对两个浮点型数值比较时,由于浮点型数据是一种不精确数据类型,产生与预期不一致的结果。
逻辑运算符
逻辑运算符只能应用于结果为逻辑值的表达式,不能用于其他类型;
三个运算符有优先级,最高的是非(!)、接着是与(&&)、或最低;
逻辑运算符(&&和||)优先级比关系运算符低。
赋值运算符 数值运算符“+、-、、/、%”与赋值运算符结合,形成复合赋值符, “+=、-=、=、/=、%=”,如: y+=x+10; //相当于y=y+(x+10) z*=15-x; //相当于z=z*(15-x) 赋值运算在所有运算符中,优先级别最低; 赋值表达式的结合性是从右到左; 赋值运算符可以连接不同类型的变量、表达式,但是赋值运算符左边只能是变量,不允许是常量、表达式等。
位运算符
运算符的优先级
1.5 数据的基本转化
自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
①有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
②byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
③当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
byte和short涉及到赋值都会转换,但是特殊运送不会
String类 值null可以赋值给任何引用类型(类、接口、数组)的变量,用以表示这个引用类型变量中保存的地址为空。 String类属于引用类型,可用null赋值。 String对象创建出来就不可能被改变,每次复制都需要创建新的对象。
强制类型转换 ①自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符,例如(int),但可能造成精度降低或溢出,格外要注意。 ②通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。 如: String a = “43”; int i = Integer.parseInt(a); boolean类型不可以转换为其它的基本数据类型。
char、byte、short之间不相互转换,涉及到运算转换成int,转成int不会自动转回来。
以下是一个强制转化的例子:
public class Demo03 {
public static void main(String[] args) {
int a; //定义整型变量
a='2' ; //对变量进行赋值
System.out.println(a);
int b;
b='2' ;
System.out.println((char)b); //输出转换后的值
}
}
1.6 程序流程控制语句
1.顺序结构:程序直接从上执到下,中间没有任何判断和跳转 2.分支结构:根据判断选择性的执行某段代码,有if…else和switch两种分支语句 3.循环结构:根据循环条件,重复性的执行某段代码。有while、do…while、for三种循环语句。JDK1.5提供了foreach循环,方便的遍历集合、数组元素。
循环语句的四个组成部分 初始化部分(init_statement) 循环条件部分(test_exp) 循环体部分(body_statement) 迭代部分(alter_statement) if语句三种格式:
1. if (条件表达式) {
执行代码块;
}
2. if (条件表达式) {
执行代码块;
} else {
执行代码块;
}
3. if (条件表达式1) {
执行代码块1;
} else if (条件表达式2) {
执行代码块2;
} else if (条件表达式3) {
执行代码块3;
}
…… else {
执行代码块n;
}
Switch用法:
switch(变量){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
… …
case 常量N:
语句N;
break;
default:
语句;
break;
}
switch(表达式)中表达式的返回值必须是下述几种类型之一:byte,short,char,int,String, 枚举; case子句中的值必须是常量,且所有case子句中的值应是不同的; default子句是可任选的,当没有匹配的case时,执行default。 break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到后面第一个break语句或直接执行到switch结尾(这种现象称为穿透)。
return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
switch和if语句的对比: 如果判断的具体数值不多,而且符合byte、 short 、int、 char这四种类型。虽然两个语句都可以使用,建议使用switch语句。因为效率稍高。
其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
for用法:
for(初始化表达式;循环条件;操作表达式){
执行语句
……
}
while用法:
while( 布尔表达式 ) {
// 循环体
}
在此时,只要布尔表达式为真,while就会一直循环下去
do..while用法“
do {
//代码语句
}while(布尔表达式);
布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了
如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。