Java基本1

java语言有哪些特点

  1. 简单易学;
  2. 面向对象(封装,继承,多态);
  3. 平台无关性( Java 虚拟机实现平台无关性);
  4. 可靠性;
  5. 安全性;
  6. 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线 程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
  7. 支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的, 因此 Java 语言不仅支持网络编程而且很方便);
  8. 编译与解释并存;

Java与C++区别

都是面向对象的语言,都支持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全 Java 的类是单继承的,C++ 支持多重继承;
虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理机制,不需要程序员手动释放无用内存

基础语法规则

访问修饰符

public private protect为访问修饰符,用于控制程序其他部分对这段代码的访问级别。

类名定义规范

类名以大写字母开头,每个单词首字母都应大写(骆驼命名)。
公共类名必须与源代码文件名相同,源代码文件名以.java结尾,程序无误编译后将得到一个包含这个类字节码的文件。
java编译器将字节码文件自动命名为公共类名.class,并与源文件储存在同一目录下。数字不能开头,不能用关键字。

注释

//或/* … */可自动生成文档的/**… */
类的注释必须在import后,类之前
方法的注释在所描述的方法前
@param变量描述
@return描述
@throws描述表示可能抛出的异常

程序执行时Java虚拟机从指定类中的main函数开始执行。而main方法调用其它方法和类。

数据类型

整型

byte
byte数据类型是8位、有符号整数
-128(-2^7) ~
127(2^7-1)
byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一

short
short数据类型是16位、有符号整数
-32768(-2^15) ~
32767(2^15 - 1)
short数据类型也可以像byte那样节省空间,一个short变量是int变量所占空间的二分之一

int
int数据类型是32位、有符号整数
-2,147,483,648(-2^31) ~
2,147,485,647(2^31 - 1)

long
long数据类型是64位、有符号整数
-9,223,372,036,854,775,808(-2^63) ~
9,223,372,036,854,775,807(2^63 -1)
默认值是0L 这种类型主要使用在需要比较大整数的系统上

· 将b的值(long类型)赋值给a,则要进行强制转换:a = (int)b;

浮点型

float
float数据类型是单精度、32位的浮点数
float在储存大型浮点数组的时候可节省内存空间
默认值是0.0f

double
double数据类型是精度、64位的浮点数
浮点数不能用来表示精确的值,如货币

浮点数默认double类型,float加f

一个浮点数字面量默认是double类型
如果要定义float类型则要在字面量最后添加f或者F float a=1.23 f;

布尔型

boolean
boolean数据类型表示一位的信息。只有两个取值:true和false
boolean不可和整型相互转换

字符型

char

要用‘ ’ 单引号括起来
码点:和一个编码表中的某个字符相对应的代码值
Unicode码点分17个代码级别,其中第一个级别从U+0000-U+FFFF称为基本的多语言级别

UTF-16编码用不同长度的编码表示所有Unicode码点,在基本的多语言级别中,每个字符16位,被称为代码单元

char类型是一个单一的16位Unicode字符,描述了一个代码单元

最小值是’\u0000’(即为0) 最大值是’\uffff’(即为65,535) 默认值是’\u0000’(即为0)前缀0b表示二进制,0表示八进制,而前缀0x代表十六进制

特殊字符的转义序列

\b退格\t制表\n换行\r回车"双引号’单引号\反斜杠

变量

变量名

必须以字母开头,由字母或者数字构成

变量的声明

变量用于存储数据,若有不确定的数据,就声明一个变量,将在内存中开辟一个数据类型的空间,并存储相应变量名和变量值。
声明尽可能靠近变量第一次使用的地方。不可用未声明的变量。

常量

关键字final,只能被赋值一次且不可再修改常量名习惯全部大写

类常量

某个常量可在一个类中的多个方法里使用关键字static final定义于main外部

运算符

转换类型的顺序

在这里插入图片描述
若将double变float则可能损失精度
计算时要统一类型

取模有负值只看左边的数,若左为负则为负,否则结果为正

System.out.println(-1%5);
System.out.println(-5%3);
System.out.println(5%-3);

结果为
-1
-2
2

i++(JVM再回顾,有关堆栈)

i++先使用原来的值,++i则先加1;

int a=8;
  int b=5;
  b=a++;
  int c=++a;
  System.out.println(b);
  System.out.println(c);
  System.out.println(a);

结果是
8
10
10

自动转换数据类型 s+=5;

short s=4;
s=s+5;//报错,直接赋值,s转换为int与5相加,得到的是int型(4个字节),无法强制类型转换赋值 给short型(只有两个字节装不下)的s
s+=5;//正确,原因在直接赋值,内部有自动转换动作,将short转换为int

移位运算符

1<<3==1<<35 ==8
例:1<<3
左移<<,先将1化为二进制,0000 0000 0000 0000 0000 0000 0000 0001,全部左移3位,变为
0 0000 0000 0000 0000 0000 0000 0001000 即8
左移结果为×2的n次,但是右操作数要完成模32的运算,即右操作数为35相当于为35%32=3

右移>>,eg:11(1011)>>2可得为二进制数10即2,除的直接取最大可整除的数

在乘法上更高效

右移>>最高位补符号位,而>>>最高位会用0补

运算符级别


若右结合则a+=b+=c等价于a+=(b+=c)

字符串

是一个预定义类String,每个“ ”双引号括出来的字符串都是String类的一个实例

substring(a,b)提取字串

b是不想复制的第一个位置
eg String a=“hello”;String b=a.substring(0,4); //b=“hell”;

拼接

直接用+
需要分隔符可用join(“/”,“a”,“b”,“c”)//得到”a/b/c“

String类对象是不可变的字符串

不可以直接改变原来的字符串,优点是可以实现字符串常量共享

检测字符串是否相等——equals()

不能用==,因为这只能检测字符串是否在同一位置,相同的字符串常量因为是共享的,所以可以用==比较,而+或者substring得到的结果所放置的位置并不同

length()返回代码单元数量

String a=“Myafn”;

  • int n=a.length();返回用UTF-16编码表示”Myafn“字符串所需的代码单元数量。
  • 用a.charAt(n)得到第n位的代码单元
  • 想得到第i个码点
    int m=a.offsetByCodePoints(0,i); int n=a.codePointAt(m);

需要许多小段字符串构建一个字符串 用StringBuilder类

append方法可以加入字符串
toString方法可以构造字符串

  StringBuilder builder=new StringBuilder();
  builder.append("ab");
  builder.append("cd");
  String a=builder.toString();
  System.out.println(a);

输入输出

输入

构建Scannerdui对象,并与标准输入流System.in关联
Scanner in=new Scanner(System.in);
而后可输入String a=in.nextLine();等

nextLine()遇到换行就结束,next()遇到空字符就结束

nextLine一次读取一行内容,而遇到换行就结束
next一次读取一个字符串,会被空格或换行分隔开

例:
abc def ghij
kl mno pqr st
uvw xyz
用next(),第一次取的是abc,第二次取的是def,第三次取的是ghij
用nextLine(),第一次取的是abc def ghij,第二次取的是kl mno pqr st,第三次取的是uvw xyz
前一个是以回车或空格为分隔符,一次取一个单词,后一个是以回车为分隔符,一次取一行。

若前有next,nextInt,nextFloat等,后接nextLine会直接不显示nextLine想输入的内容.故需要在nextLine前加一个多余的nextLine以消去换行符影响

Scanner in=new Scanner(System.in);
  
  System.out.println("next");
  String m=in.next();
  System.out.println(m);
  System.out.println("nextLine");
  String xiaoqu=in.nextLine();//消去换行对下一个nextLine键入的影响
  String w=in.nextLine();
  System.out.println(w);

格式化输出printf

用于printf的转换符

%8.2f :用8个字符宽度,精度在小数点后2位的float
同样,d十进制数; x十六进制数;o八进制;e指数浮点数;g通用浮点数;a十六进制浮点数;
s字符串;c字符;b布尔;h散列码(哈希);n与平台有关的行分隔符(换行符)

用于printf的标志

在这里插入图片描述

打印日期(第六章回顾)

简单的
Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); String dateString = formatter.format(currentTime); System.out.println("dateString");
或者
Date d = new Date() SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sj = sdf.format(d); System.out.println("sj");

文件输入输出

Scanner in=new Scanner(Paths.get(“文件名”),“UTF-8”);
若文件名中有,要在每个\前加一个\ 例如:c:\myfile\my.txt
而后可以用Scanner方法读取

输入:构造PrintWriter对象
PrintWriter out=new PrintWriter(“myfile.txt”,“UTF-8”);
然后可以输出print一类的命令
注意:
一个不存在的文件构造一个Scanner,或者用一个不能被创建的文件名创建的文件名构造一个PrintWriter就会发现异常,需要在main后throws IOException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值