Java基础知识笔记1

简单java应用程序

public class Example	//类声明
{
	public static void main(String[] args)    //main方法声明,必须声明为public
	{
		System.out.println("This is my first Java program");	//方法
	}
}

基本概念

  • 数据类型
类型存储需求有效位数
int4字节
short2字节
long8字节
float4字节6~7位
double8字节15位
  • boolean 类型
    java的布尔类型只可以使用falsetrue这两各值,不可以使用诸如0或者非0这样的值。

  • 特殊浮点标记

    • 无穷大 :Double.POSITIVE_INFINITY
    • 负无穷大 :Double.NEGATIVE_INFINITY
    • NaN:Double.NaN
      然而以上三个常量在实际中很少用到

注:若要判断一个特定值是否等于Double.NaN,可以使用

	if(Double.isNaN(X))	//check whether x is "not a number"
  • Java中的break可以使用标签,使用方法类似cpp中的goto语句

  • final关键字
    final关键字可以指示常量

public class Constants
{
	public static void main(String[] arg)
	{
		final double A_NUM=2.0;	//final表示这个变量只能被赋值一次,一次复制之后,就不能够再修改了
									//习惯上,常量名使用全大写
	}
}
  • 严格浮点运算标记strictfp
public static strictfp void main(String[] args)
  • 数学函数和常量
/*常用函数类*/
Math.sqrt(x)	//平方根
Math.pow(x,a)	//幂运算
Math.floorMod(position + adjustment,12)	//归一化到0~12
/*三角函数类*/
Math.sin	Math.cos	Math.tan	Math.atan	Math.atan2
/*指数函数和对数函数*/
Math.exp	Math.log	Math.log10
/*PI和e*/
Math.PI     Math.E

如果不必在数学方法名和常量名前添加前缀“Math”,则可以:

import static java.lang.Math.*;
System.out.println(sqrt(x));
  • 强制转换
    基本强制转换类型和C语言类似,这里多介绍一个round方法
double x=9.997
int nx=(int) Math.round(x);	//round返回最接近的整数,返回值类型为long,这里需要强制转换类型	
  • 运算符
    各种运算符使用基本与c++类似。
    其中移位运算>><<直接限定是算术移位(扩展符号位),而>>>是逻辑移位(填充0位),不存在<<<这种运算。
  • 枚举类
enum Size{S、M、L、X};
Size s = Size.S;	//Size类也可以声明为null值
  • 大数值
    若基本的整数和浮点数精度不满足要求,可以使用java.math包中的两个类:BigIntegerBigDecimal。这两个类可以处理包含任意长度数字序列的数值
BigInteger a = BigInteger.valueOf(100); 
/*大数加和乘的运算*/
BigInteger c = a.add(b);	//c = a+b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));	//d = c*(b+2)

字符串

/*定义*/
String e = "";	//定义空字符串
String a = "This is my first Java program";
System.out.println(a);
String e = a.substring(0,3);	//第一个参数是字串起始位置,第二个参数是不想复制的第一个位置
/*拼接*/
String c = ",i like it!";
String d = a + c;
String all = String.join("A", "B","C","D");	//这里输出的是"BACAD"
/*检测字符串是否相等*/
s.equals(t);	//如果字符串s与t相等,则返回true;否则,返回false
"Hello".equals(s);	//这种比较也是合法的
"Hello".equalsIgnoreCase("hello");	//不区分大小写的比较两个字符串
/*检测字符串是否是空串*/
if(str.length() == 0);	//空串与null值不同
if(str != null);	//检测是否是null
/*返回位置n的代码单元*/
char first = t.charAt(0);

Java中将String类对象称为不可变字符串,这样的优点是编译器可以让字符串共享。Java的设计者认为共享带来的高效率远远胜于提取、拼接字符串所带来的低效率。
直接对已经存储有数据的String方法a赋予另外一个值,不会产生内存遗漏,Java会自动地进行垃圾回收。

构建字符串

StringBuilder builder = new StringBulider();	//构建一个空的字符串构建器,当需要添加一部分内容的时候,调用append方法
builder.append(ch);		//追加一个代码单元并返回this
builder.append(str);	//追加一个字符串并返回this
String completedString = builder.toString();	//返回一个与构建器或缓冲器内容相同的字符串

StringBuilder 和 StringBuffer的区别

StringBuilder 的前身是 StringBuffer 
StringBuffer 效率比较低,但是允许采用多线程的方式执行添加或删除字符的操作
如果所有字符串在一个单线程中编辑,应该使用 StringBuilder

输入输出

输入

/*基本输入*/
import java.util.*;                   //Scanner类定义在java.util包中
Scanner in = new Scanner(Syetem.in);	//首先构造一个Scanner对象,并与“标准输入流”System.in关联
String name = in.nextline();	//nextline可以输入空格
String firstname = in.next();	//next以空格为结束标志
int age = in.nextInt();			//读取一个整数
int salary = in.nextDouble();	//读取一个浮点数
String string = in.next();		//读取以空白字符结束的字符串,如' ' ,'\t','\f','\r','\n'
String string = in.nextln();	//读取以按下回车键为结束标志的字符串
//从控制台输入
Console cons = System.console();
String username = cons.readLine("Username");
char[] passwd = cons.readPassword("Password:");

输出

//简单输出
System.out.println();	// 输出以后并换行
System.out.print();	//输出以后不换行
//格式化输出
System.out.printf("Hello,%s. Next year, you'll be %d",name,age);

控制流程

  • 循环结构
    Java的基本循环结构与C++类似,这里不再论述。
    需要注意的是Java支持带标签的break语句,标签用法与C++的goto类似。同样的,continue也可以使用标签。

  • for each 循环
    用来一次处理数组中的每个元素,而指定下标值。
    其格式是:
    for (variable:collection) statement

for(int element : a)
	System.out.println(element);

数组

  • 数组声明

Java数组与cpp中的分配在heap上的数组指针是类似的

/*声明*/
int [] a = new int[100];
/*匿名声明*/
new int [] ={1,2,3,4,5,6,7};
/*不创建新变量声明*/
a = new int[] {1,2,3,4,5,6,7}; 
//上面例子等价于
int [] b = {1,2,3,4,5,6,7};
a = b;
  • 数组拷贝

如果数组元素是数值型,那么多余的元素将被赋值为0;如果数组元素是布尔型,则将赋值为false。如果长度小于原始数组的长度,则只拷贝最前面的数据元素

/*变量拷贝*/
int [] a =b ;
a[5] = 1 ; 				//拷贝的结果是两个变量引用同一个数组
/*两个数组的拷贝*/
int [] a = Array.copyOf(b,b.length);
  • 数组排序
int[] a = new int[10000];
Arrays.sort(a)	//快排
  • 多维数组

    • 多维数组只需要记住一句话:“多维数组也是一维数组,只不过是数组的数组
    • Java中多维数组可以实现锯齿数组(ragged array)。如,二维数组的各行长度不同。
/*声明和初始化*/
double [][] a =
{
	{1,2,3,4},
	{5,6,7,8},
	{9,10,11,12}
};
/*二维数组在循环中赋值*/
for(int i=0;i<a.length;i++)
{
	for(int j=0;j<a[0].length;j++)
	赋值语句;
}					//a.length是数组的列数,a[0].length是数组的行数
/*for each 在二维数组中的使用*/
for(double[] row : a)
	for(double value : row)
	do something with value;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值