Java基础一
文章目录
注释
-
单行注释
//这是单行注释
-
多行注释
/* 这是多行注释 注意:多行注释可以嵌套单行注释,但不能嵌套多行注释与文档注释 */
-
文档注释
/** 这是文档注释 一般用在类、方法和变量上,用来描述其作用。 注释后,鼠标放在类和变量上会自动显示出我们注释的内容。 注意:文档注释能嵌套单行注释,但不能嵌套多行注释和文档注释。 补充:文档注释可以通过javadoc命令把注释中的内容生成HTML文档 */
标识符
-
作用:为方法、变量、常量、类和类的对象等命名
-
构成规则
- 0—9,A—Z和a—z,$,_
- 首位不能是数字,区分大小写,不能使用关键字作为标识符
-
命名约定
- 类和接口名:每个单词的首字母大写。如HelloWorld
- 方法名:首字母小写,其余首字母大写,少用下划线。如myName(驼峰命名法)
- 常量名:全部大写,单词之间用下划线分隔。如SIZE_NAME
- 变量名:首字母小写,其余单词首字母大写,应指示变量的用途,临时变量可用单个字符,少用_与$
- 包package命名全小写
-
注意String是一个类名,即字符串类,其对象就是字符串。不属于关键字!
关键字
注意:修饰符(访问控制的也属于修饰)在使用时不存在先后顺序
-
访问控制:
private 私有的 protected 受保护的 public 公共的
-
数据类型
byte 字节型 char 字符型 short 短整型 int 整型
long 长整型 float 浮点 double 双精度 boolean 布尔型 -
类、方法和变量修饰符
abstract 声明抽象 extends 继承 final 最终 class 类
implements 实现 interface 接口 native 本地 new 创建
synchronized 同步 transient 短暂 static 静态 strictfp 精准
volatile 易失 -
错误处理
try 捕获异常 catch 处理异常 finally 有没有异常都执行
throw 抛出一个异常对象 throws 声明索所有需要抛出的异常 -
程序控制语句
if 条件引导 else 反之 switch 分支引导 case 分支
while 循环 for 循环 break 跳出循环 continue 继续
return 返回 do 运行 instanceof 实例 default 默认 -
包相关
import 引入 package 包
-
变量引用
super 父类 this 本类 void 无返回值
-
保留字
cast const goto var rest outer operator inner generic future null true false
数据类型
java属于强类型语言,所有变量都必须先定义后才能使用。安全性高,速度慢。
-
基本数据类型:字符型、布尔型、数值型(整数、浮点)
注意:long数值后加L;float数值后加F
最好避免使用浮点数进行比较
类型 | 关键字 | 占用内存 | 取值范围 |
---|---|---|---|
布尔型 | boolean | 1 字节 | true 或 false |
字节型 | byte | 1 字节 | -128~127 |
字符型 | char | 2 字节 | ISO 单一字符集 |
短整型 | short | 2 字节 | -32768~32767 |
整型 | int | 4 字节 | -2147483648~2147483647 |
长整型 | long | 8 字节 | -9223372036854775808L~9223372036854775807L |
单精度浮点型 | float | 4 字节 | +/-3.4E+38F(6~7 个有效位) |
双精度浮点型 | double | 8 字节 | +/-1.8E+308 (15 个有效位) |
-
引用数据类型:类、接口、数组
-
由用户自定义,用来限制其它数据类型。
-
java不支持C++中的指针类型、结构类型、联合类型和枚举类型。
-
引用是一种数据类型(保存在栈中),保存了对象在内存(堆空间)中的地址。
-
不同的引用可能指向同一个对象。一个对象可以有多个引用,即该类型的变量。
-
引用类型变量相当于C中的指针。
-
-
两种类型的区别
所有的类型在内存中都会分配一定的存储空间(形参在使用的时候也会分配存储空间,方法调用完成之后,这块存储空间自动消失), 基本变量类型只有一块存储空间(分配在栈中), 而引用类型有两块存储空间(一块在栈中,一块在堆中)
值传递,引用传递
- 值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
- 引用传递:是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
- java都是值传递。详细解释,点击跳转
数据类型转换
-
不能对布尔值进行转换
-
高转低必须强制转换,低转高则不必
-
在进行数据运算时若操作数有多种类型,会自动升级为高类型
//强制转换
char a = 'A';
System.out.println((int)a);//输出结果为65
//强制转换可能存在内存溢出或精度问题
常用转义字符
转义字符 | 意义 | ASCII码值 |
---|---|---|
\n | 换行 | 010 |
\r | 将当前位置移到本行开头 | 013 |
\t | 水平制表 | 009 |
\v | 垂直制表 | 011 |
\\ | 代表一个反斜杠 | 092 |
\’ | 代表一个单引号 | 039 |
\" | 代表一个双引号 | 034 |
\0 | 空字符null | 000 |
变量
局部变量、实例变量、类变量
public class Perosn{
//实例变量,从属于对象,可以不进行初始化
//默认值:数值为0,布尔值为false,除基本类型其余都是null
String name;
//类变量 static
static int age = 18;
public static void main(String[] args){
//局部变量,必须声明和初始化值
int i = 0;
//变量类型 变量名 = new 变量类型();
Person p = new Person();
p.name = "Jason";
//类变量属于类本身,只要初始化完成,即可使用类变量
System.out.println(age);
}
}
常量
使用大写字符,初始化后不能再改变值
static final double PI = 3.14;
运算符
- 算数运算符:+,-,*,/,%,++,–(%:模运算,取余)
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,==,!=,instanceof
- 逻辑运算符:&&,||,!
- 位运算符:&,|,,^,>>,<<,>>>(:按位取反,^:异或)
- 条件运算符: ? : (三元运算符,x ? y : z 含义:如果x==true,则结果为y,否则为z)
- 扩展赋值运算符:+=,-=,*=,/=
运算符优先级:点此跳转查看
运算相关问题
幂运算用Math.pow()
int a = 3;
int b = a++;
System.out.println(a);//输出为4
System.out.println(b);//输出为3
int c = 3;
b = ++c;
System.out.println(c);//输出为4
System.out.println(b);//输出为4
/*
即 b = a++; 相当于先把a值赋予b,之后a再自增
而 b = ++a; 相当于先让a自增,后赋值于b
*/
//短路运算
int a = 5;
boolean b = (a<4)&&(a++<4);
System.out.println(b);//输出false
System.out.println(a);//输出5
//因为在运行完a<4时,就已经确定b,后面的没有执行!
//字符串连接符 +
int a,b = 10,20;
System.out.println(""+a+b);//输出1020
System.out.println(a+b+"");//输出30
包机制
//定义包的语法格式
package pkg1[.pkg2[.pkg3…]];
//一般利用公司域名倒置作为包名,如
package com.baidu.www;
//导入包成员
import pkg1[.pkg2…].(classname|*);
Scanner
next():输入有效字符前的空白自动去掉,字符后的空白作为结束符,即next()不会得到带有空格的字符串
nextLine():以Enter为结束符,即该方法返回的是回车前的所有字符
hasNext()与hasNextLine():判断是否有输入,值都为布尔型
hasNextInt():判断是否输入为int类型,还有hasNextFloat()等数据类型判断方法
import java.util.Scanner;
public class Test1{
public static void main(String[] args){
//创建一个扫描器对象,用于接收键盘输入
Scanner scan = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if (scan.hasNext()){
//使用next方式接收
String str1 = scan.next();
System.out.println("输入的内容为:" + str1);
}
//凡是属于IO流的类,如果不关闭会一直占用资源
scan.close();
}
}
/*
hasNext()可以换成hasNextLine(),此时相应的next()就应换成nextLine()
如果都输入Hello World,则第一个输出Hello,第二个输出Hello World
*/
//println:输出完会换行;print:输出完不会换行
if选择结构
if (布尔表达式1){
//布尔表达式1值为true时要执行的代码
}else if(布尔表达式2){
//布尔表达式2值为true时要执行的代码
}else{
//以上表达式值都为false时要执行的代码
}
switch选择结构
-
switch语句中的变量类型可以是byte,short,int,char,从JAVA SE 7开始,支持String类型
-
case语句中值的类型必须与变量的数据类型相同,且必须为常量或字面常量
-
default分支在没有case语句的值和变量相等时执行,其不需要break语句
switch(expression){
case value1 :
//语句
break; //可选
case value2 :
//语句
break; //可选
default : //可选
//语句
}
while循环结构
while(布尔表达式){
//true运行语句
}
do…while循环
do{
//代码语句
}while(布尔表达式);
for循环
for(初始化条件;条件判断;迭代){
//循环体
}
//增强型for循环,Java5引入。主要用于数组或集合。
for(声明语句:数组或集合){
//代码语句
}
//声明语句中的局部变量的类型必须和数组元素的类型匹配
//例子
int[] numbers = {10,20,30,40};
//遍历数组的元素
for (int x:numbers){
System.out.println(x);
}
break,continue
- break用于强行退出循环,不再执行所在循环的代码(break也在switch中使用)
- continue用于终止某次循环过程,即跳出循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
- 带有标签的continue和break(类似于goto):
//打印101-150之间的质数
int count = 0;
outer:for(int i=101;i<150;i++){
for(int j=2;j<i/2;j++){
if(i%j==0){
continue outer;
}
}
System.out.print(i+" ");
}
Java内存
- 堆
- 存放new的对象和数组
- 可以被所有的线程共享,不会存放别的对象引用
- 栈
- 存放基本变量类型(会包含这个基本类型的具体数值)
- 引用对象的变量(会存放这个引用在堆里的具体地址)
- 方法区
- 可以被所有的线程共享
- 包含了所有的class和static变量