JavaSE-基础语法(一)

helloworld

public class HelloWorld{
	public static void main(String[] args) {
		System.out.println("HelloWorld")
	}
}

注释

  1. 行内注释 //
  2. 块注释
/**
*
*/
  1. 文档注释
/**
* @author 作者
* @version 版本
* @since  jdk
* @param 参数
* @return 返回值
* @ throws 异常
*/

在命令行中使用javadoc命令就可以生成api文档。

javadoc -encoding UTF-8 -charset UTF-8 [java文件]

注解

具有语义,会实现某些功能

@Override

数据类型

java 属于强类型语言:要求变量的使用要严格符合规定,所有变量必须先定义后使用。
在java中数据类型分为两大类:

  1. 基本数据类型

  2. 引用数据类型

基本数据类型

  1. 数值类型

整数类型

  1. byte

占1个字节,数值范围:-127~128

public class Main{
	public static void main(String[] args){
		byte i = 12;
		System.out.println(i);  //=> 12

		byte i = 129;
		System.out.println(i);  //=> error,内存溢出
	}
}
  1. short

占2个字节,数值范围:-32768~32767

public class Main{
	public static void main(String[] args){
		short i = 12;
		System.out.println(i);  //=> 12
	}
}
  1. int

占4个字节,数值范围:-2147483648~2147483647

public class Main{
	public static void main(String[] args){
		int i = 12;
		System.out.println(i);  //=> 12
	}
}
  1. long

占8个字节,数值范围:-9223372036854775808~9223372036854775807

public class Main{
	public static void main(String[] args){
		long i = 12L;
		System.out.println(i);  //=> 12
	}
}

浮点类型

  1. float

占4个字节

public class Main{
	public static void main(String[] args){
		float i = 1.2F;
		System.out.println(i);  //=> 1.2
	}
}
  1. double

占8个字节

public class Main{
	public static void main(String[] args){
		double i = 1.2;
		System.out.println(i);  //=> 1.20
	}
}
  1. 注意事项:

float 与 double 的比较:

public class Main{
	public static void main(String[] args){
		float f = 0.1F;
		double f2 = 1.0/10;
		System.out.println(f==f2);   //=> false

		float f3 = 2313131313131F;
		float f4 = f3+1;
		System.out.println(f3==f4);   //=> true
	}
}

说明:float具有舍入误差性,只能取个大概,所以在进行一些严密计算或浮点类型进行比较时,尽量使用数学工具类 BigDecimal

字符类型

  1. char

英文占1个字节,中文占2个字节

public class Main{
	public static void main(String[] args){
		char i = "中"System.out.println(i);  //=> 中
	}
}

说明:所有的字符本质都是数字,并且可以进行类型的转换。

  1. 字节数

Java中char的字节数
以前一直以为char占一个字节,后来发现远没这么简单。Java中char的字节数,和编码有关。使用UTF-8,英文字符占1个字节,中文占3个字节。下面在是在Ubuntu中测试的结果:

public static void main(String[] args) throws IOException {
	
	String chnStr = "中文";
	System.out.println("length of two Chinese character: " + chnStr.getBytes("UTF-8").length );
	String engStr = "en";
	System.out.println("length of two English character: " + engStr.getBytes("UTF-8").length );
}

输出:

length of two Chinese character: 6
length of two English character: 2

在网上流传这样一个面试题:Java中一个中文char的字节数是?答案为不确定(2,3,4),跟编码有关。下面这段程序可以证明这个答案:

public static void main(String[] args) throws IOException {		
	String chnStr = "华";
	System.out.println("length of one Chinese character in gbk: " + chnStr.getBytes("GBK").length );
	System.out.println("length of one Chinese character in UTF-8: " + chnStr.getBytes("UTF-8").length );
	System.out.println("length of one Chinese character in Unicode: " + chnStr.getBytes("UNICODE").length );
}

输出:

length of one Chinese character in gbk: 2
length of one Chinese character in UTF-8: 3
length of one Chinese character in Unicode: 4
  1. 布尔类型

true

占1位

public class Main{
	public static void main(String[] args){
		boolean bool = true;
		System.out.println(bool);  //=> true
	}
}

注意:

  1. 不能对布尔值进行转换

false

占1位

public class Main{
	public static void main(String[] args){
		boolean bool = false;
		System.out.println(bool);  //=> false
	}
}

注意:

  1. 不能对布尔值进行转换

引用数据类型

java 内置类(java SDK 封装的类),需要实例化对象进行调用。

  1. String
  2. StringBuilder
  3. StringBuffer
  4. Date
  5. DateFormat
  6. Math
  7. Random

实例化对象:

public class Main{
	public static void main(String[] args){
		String a = new String("abc");
		System.out.println(a);  //=> abc
	}
}

自定义的类

  1. 自定义类,实例化点调用
public class Main{
	public static void main(String[] args){
		Main m = new Main();
		m.console();  //=> this is a function
	}
	public void console(){
		System.out.println("this is a function");
	}
}
  1. 接口

抽象类

  1. 使用 interface 关键字声明接口类。
  2. 接口中所有的方法都是抽象的。
  3. 使用 implements 继承接口。相比于 extends 可实现多继承。
  4. 子类(继承接口类)重写父类定义的接口方法,用于实现功能。
  5. 接口不能被实例化,因为没有构造方法。
// UserService.java 接口类
public interface UserService{
	// 定义抽象方法
	void add(String name);
	void delete(String name);
	void update(String name);
	void query(String name);
}

// TimerService.java
public interface TimerService{
	// 定义抽象方法
	void timer(String name);
}


// UserServiceImpl.java 接口实现类
/* 多继承 */
public class UserServiceImpl implements UserService,TimerService{
	// 方法重写
	@override
	public void add(String name){

	}
	@override
	public void delete(String name){

	}
	@override
	public void update(String name){

	}
	@override
	public void query(String name){

	}
	@override
	public void timer(String name){

	}
}
  1. 数组

数组的声明

  1. 数组变量本身属于引用类型,数组也可以看成对象(同样可以通过 new 实例化对象),数组中每一个元素相当于对象成员本身。
  2. 由于 java 中的对象存放在堆中,所以数组同样存放在堆中。
public class Main{
	public static void main(String[] args){
		int[] arr = new int[2];
		System.out.println(arr);  //=>[0, 0]
	}
}
  1. 枚举

枚举类的声明与使用

  1. 定义枚举类的关键字是 enum
  2. 可以直接使用枚举类进行调用。
  3. 所有的枚举都隐性继承于 java.lang.Enum。枚举实际上还是一个类,每个被类枚举的成员实际上还是一个枚举类型的实例,它们都默认使用 public static final 修饰,所以直接使用枚举类调用即可。
// 定义枚举类
public enum Gender{,;    
}

public class Main{
	public static void main(String[] args){
		System.out.println(Gender.);  //=> 男
	}
}

类型转换

基本数据类型:byte,short,char —> int —> long —> float —> double

引用数据类型:[子]class —> [父]class —> Object

  1. 自动类型转换

低数据类型转高数据类型

(高数据类型)变量名 = (低数据类型的值)
  1. 强制类型转换

高数据类型转低数据类型

(低数据类型)变量名 = (高数据类型的值)
  1. 注意点:
  • 对于基本数据类型来说,强制类型转换会造成精度的缺失,并且要注意(计算时)内存溢出问题。
public class Main{
	public static void main(String[] args){
		int a = 129;
		byte i = a;
		System.out.println(a);  //=> 128
		System.out.println(i);  //=> error,内存溢出
	}
}
public class Main{
	public static void main(String[] args){
		int a = 10_0000_0000;
		int b = 20;
		int c = a*b;  // 此处存在计算式内存移除问题
		long c = a*b;  // 默认是 int ,由于计算时没有进行类型的转换以至于造成计算时的内存溢出 
		
		// 进行类型的转换,先将一个变量进行类型转换
		long c1 = a*((long)b);  
		System.out.println(c1);  //=> 20000000000
	}
}
  • 对于引用数据类型来说,引用类型的转换多发生于继承关系之中,但是可能会造成自身属性、函数的丢失。此外不能把对象类型转换为不相干的类型。
// Father.java
public class Father /*extends Object*/{
	public void fatherMethod(){
		System.out.println('this is a father method')
	}
}

// Son.java
public class Son extends Father{
	public void sonMethod(){
		System.out.println('this is a son method')
	}
}

// Main.java
public class Main{
	public static void main(String[] args){
		// 自动转换
		Father son = new Son();
		son.fatherMethod();  //=> this is a father method
		son.sonMethod();  //=> error,没有这个方法需要进行强制转换
		((Son)son).sonMethod();  //=> this is a son method
	}
}
  • 不能对布尔值进行转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值