开发语言介绍——Java
一、基本说明
1.Java语法的特点
- 关键字都是小写字母
- 标识符没有长度限制
- 使用Unicode编码
- Java是一种强类型的语言,变量在编译之前一定要被显示的声明
2.配置环境变量
- 安装jdk软件,记录安装路径
- 打开 “计算机属性”-->"高级系统设置"-->"高级"标签页-->"环境变量"按钮
- 新建一个JAVA_HOME的用户变量,路径编写为jdk的安装路径
- 编辑变量 Path,向其中添加路径:%JAVA_HOME%bin;%JAVA_HOME%jrebin;(注意不要删除其中原有的数据)
- 新建变量 CLASSPATH ,路径编写为:%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;
3.内存
Java中,内存分为栈内存和堆内存。栈内存中保存变量,堆内存中保存使用new语句创建的对象。
二、基础语法
1.访问权限
Java中用访问修饰符来修饰变量、方法、类,来控制这些元素的访问权限。
- 只要没有显示声明为某种权限,默认都是friendly。
- 如果类中没有构造函数,编译器会为类自动添加构造函数,构造函数的访问权限和类的访问权限一致。
- 子类的访问权限,只能比父类的访问权限更加开放
成员变量和方法的访问权限:
![0d21ef32316743f2f8d92cb2ba1d4c73.png](/i/ll/?i=img_convert/0d21ef32316743f2f8d92cb2ba1d4c73.png)
普通类的访问权限:
![36d2dd0122c076b80b77e488ec12bff5.png](/i/ll/?i=img_convert/36d2dd0122c076b80b77e488ec12bff5.png)
内部类的访问权限:
- 内部类可以使用public、protected、friendly、private 4种修饰符进行修饰。
2.数据类型
整型:
![7a8208a3a439efacbedc8d66fc495bed.png](/i/ll/?i=img_convert/7a8208a3a439efacbedc8d66fc495bed.png)
说明:
- Java中所有整型数据都是带符号的
- 整型常量默认为int类型的。
- 在数字后面加上字母L,该整数会被定义成long类型。
- 在数字后面加上字母l,该整数会被定义成long类型。
浮点型:
![7d40f494e756c09ed7a3d825d890d724.png](/i/ll/?i=img_convert/7d40f494e756c09ed7a3d825d890d724.png)
说明:
- 浮点型可以用来表示小数,或者范围更大的整数。
- 浮点型常量默认为double类型。
- 在数字后面字符F,该浮点数会被定义为float。
- 在数字后面字符D,该浮点数会被定义为double。
- Float.MAX_VALUE、Float.MIN_VALUE表示float类型的上下限。
- Double.MAX_VALUE、Double.MIN_VALUE表示double类型的上下限。
字符型:
![0645a7761eb717e3ca129ecab3509294.png](/i/ll/?i=img_convert/0645a7761eb717e3ca129ecab3509294.png)
说明:
- char类型的值必须包含在单引号中。
- 在Java中字符采用Uicode编码,所以无论是中文还是英文,每个字符都占用2个字节。
布尔型:
![1970b7f87a5226fc75a2d560995e2652.png](/i/ll/?i=img_convert/1970b7f87a5226fc75a2d560995e2652.png)
3.数据类型转换
自动转换:
赋值运算符和算术运算符两边的数据类型不一致时,如果数据类型相互兼容,将自动转换数据类型。
数据的兼容关系:
- byte、short、int、long、float、double相互兼容。
- char、boolean与所有类型不兼容。
转换规则:
- 整型转换为浮点型
- 长度短的转换为长度长的
强制类型转换:
当无法进行自动转换时,可以使用强制类型转换。
语法: (目标数据类型)数据 示例:(int) float a=1.1f; 将float数据a强制转为int型。
说明:
- 当浮点型转换为整型时,小数部分被舍弃。
- 当数据范围大的数据被转换为数据范围小的数据时,会将当前数据对目标数据类型取模后,将模保存到目标数据中。
4.运算符号
![f01f7c382fca7c69fd616a494556fef0.png](/i/ll/?i=img_convert/f01f7c382fca7c69fd616a494556fef0.png)
![07fa14de0d63fe71b167ac86d762bfee.png](/i/ll/?i=img_convert/07fa14de0d63fe71b167ac86d762bfee.png)
说明:
- 只有byte、short、char、int、long类型的数据可以进行位移操作。
- byte、short、char位移后会自动转换为int类型。
- int、long位移后的数据类型不变。
- 位移操作的结果会保存在新的内存空间中,不会影响参与位移数据的值。
- byte、short、char、int类型的数据进行位移时,实际移动的位数是位移公式中的移动位数%32的值。
- long类型的数据位移时,实际移动的位数是要求移动位数%64
- 左移的移动规则:将一个数据转换成二进制,移动几位就在末尾添加几个0,将超出数据长度的高位舍弃。如果一个数左移n位后没有舍弃高位,相当于这个数乘上2的n次方。
- 带符号右移的移动规则:将一个数转换成二进制,移动几位就在高位添加几个0,然后将左边第一位修改为数据原本的正负符号(1表示整数,0表示负数),将超出数据长度的低位舍弃。一个数右移n位后,相当于除以2的n次方。
- 不带符号右移的移动规则:移动规则与带符号右移的规则一致,不过在补高位时一律补0,而不考虑数据原本的正负符号。
- 算数运算符、赋值运算符可能触发数据类型的自动转换
- 在Java中,赋值语句可以连接在一起,例如:x=y=z=5。
三、数据结构
1.字符串
在Java中,字符串是一个对象,可以用Java提供的标准包Java.lang中封装的String类进行创建。
一个String对象被创建后,如果它的值发生改变,将会创造出一个新的字符串对象,并且将新的字符串对象的地址复制给引用变量。旧的字符串对象依然存在。如果一个字符串对象的值需要经常改变,可以创建为StringBuffer类型。
使用注意:
- 在结尾时不要使用0符号
- 字符串内容必须用双引号包含
- 字符串中的每个字符都使用Unicode编码
声明:
String name;
实例化:
- 使用构造函数实例化字符串对象:
![289446e2803d9c2d32b9b14f1bb1c7cc.png](/i/ll/?i=img_convert/289446e2803d9c2d32b9b14f1bb1c7cc.png)
- 使用字符串常量实例化字符串对象:
String name= "String content";
- 使用字符串连接符实例化字符串对象
字符串方法:
![c9f216f2878a41c30c18cca675fd02bc.png](/i/ll/?i=img_convert/c9f216f2878a41c30c18cca675fd02bc.png)
2.一维数组
声明:
- 语法:type arrayName[]
- 语法:type[] arrayName[];
说明:
- type是数据类型
- 声明数组的时候系统不会分配内存空间
- 声明数组的时候不能指定长度
实例化:
- 语法:arryaName = new type[length];
说明:
- type必须与声明时的类型一致
- length是必须是大于1的正整数
- 实例化语句可以跟声明语句合并
初始化:
- 静态初始化
语法:type[] arrayName={value1,value2} 说明:静态初始化的语句必须与数组的声明语句写在一起,此时不需要new关键字。
- 动态初始化
语法:type[] arrayName=new int[]{value1,value2} 说明:动态初始化相当于在创建数组的时候,执行初始化操作。
内存中的保存形式:
一维数组创建后,会在堆内存中,分配出数据元素个数的存储单元,用来保存数组元素的值。在栈内存中用数组名创建一个变量,保存数组第一个元素在堆内存中的地址。
元素访问:
语法:array[index]
属性:
length:元素个数
方法:
![63bf0519cfd8d84f0d42703b01eb76e0.png](/i/ll/?i=img_convert/63bf0519cfd8d84f0d42703b01eb76e0.png)
3.二维数组
二维数组是由多个一维数组组成的,各个一维数组的长度可以一样,也可以不一样。
声明:
- 语法:type[][] arrayName;
- 语法:type arrayName[][];
实例化:
- 一维数组长度相同的二位数组:arrayName = new type[length1][length2]
- 一维数组长度不同的二位数组只能给每个一维数组分别实例化:
- arrayName = new type[length][];
- arrayName[0] = new type[length21];
- arrayName[1] = new type[length22];
初始化:
- 语法:type[][] arrayName = {{value00,value01},{value10,value11,value12}}
内存中的保存形式:
假设数组为:
- int[][] a= new int[2];
- a[0] = new int[2];
- a[1] = new int[3];
申请内存的顺序:
- 在堆内存中,为a[0]和a[1]分配两个单元的空间,让这两个一维数组名变量保存他们第一个元素的地址。
- 在堆内存中,分配2个连续的单元,用来保存a[0]这个一维数组的元素值,同时将a[0][0]的地址保存到a[0]的内存空间中。
- 在堆内存中,分配3个连续的单元,用来保存a[1]这个一维数组的元素值,并且把a[1][0]的地址保存到a[1]的内存空间中。
- 在栈内存中,分配一个单元给二维数组名a,将a[0]的地址保存在这个空间中。
内存中的数据:
元素访问
语法:array[index][index]
![5272661b37f32f6ccf4b1c8bfb0fbeb4.png](/i/ll/?i=img_convert/5272661b37f32f6ccf4b1c8bfb0fbeb4.png)
四、库函数
![0b2294e90950955d0e4f086017a16836.png](/i/ll/?i=img_convert/0b2294e90950955d0e4f086017a16836.png)
五、使用技巧
main函数不能写在内部类中
1.使用正则表达式
思路:用指定的正则表达式实例化一个pattern对象,然后调用这个对象的匹配方法得到匹配结果。
示例代码:
- String string="abcde";
- String regex="c//we";
- Pattern p=Pattern.compile(regex);
- Matcher m=p.matcher(string);
- while(m.find())
- {
- System.out.println(m.group());
- }
2.去掉数组重复项
思路:
- 假设需要去重的数组名为O,新建一个可变长度的数组N
- 依次从数组O中取出元素,如果在数组N中存在,直接从O中删除;如果在N中不存在,放入N中再从O中删除。
- 最后数组N就是O去重后的数组。
3.整数取模问题
不同的编译器,对整数取模会有不同的结果:
- 对于同号的2个整数,所有语言的运算规则是使商尽可能小。
- 对于异号的2个整数,C++/Java使商尽可能大,其他语言使商尽可能小。
4.快速遍历数组元素
示例代码:
- int[] a={1,2,3};
- for(int i:a)
- {
- System.out.println("i="+i);
- }
https://blog.csdn.net/weixin_30767365/article/details/113082817
标签:Java,语言,int,介绍,内存,数组,new,type
From: https://www.cnblogs.com/sunny3158/p/16853323.html