一java的开发环境和配置
http://www.runoob.com/java/java-environment-setup.html#win-install
javac:进行对java文件的编译
java:执行编译后的文件
C : > javac HelloWorld.java C : > java HelloWorld Hello World
二 java的第一段代码
首先需要创建一个包名,然后才能创建一个class类名
我的第一段代码:
package test; //这里就是创建的包名,声明一个包名 public class HelloWorld { //public一种访问修饰符,是共有访问的修饰符 //class创建一个类名 public static void main(String []args) { //void代替没有返回值 //static代表的是修饰静态方法 System.out.println("Hello World"); //System.out.println输出语句 } }
public:共有访问的修饰符
package test; public class HelloWorld1 { private static void main(String []args) { //private私有修饰符 //main方法是java项目的整个入口 //static代表的是修饰静态方法 System.out.println("Hello World"); //System.out.println输出语句 } }
private:私有访问修饰符
HelloWorld.java 文件 package test; public class HelloWorld { public static int newtest() { return 1; } } Test.java 文件 package test; public class Test extends HelloWorld { protected static int test_1() { int newtest = newtest(); newtest=2; return newtest; } public static void main(String []args) { //private私有修饰符 int test=newtest(); System.out.println(test); int test_1=test_1(); System.out.println(test_1); } }
protected:只有继承关系的类才能访问,受保护的关系
总结:静态方法只能在静态方法里面操作
extends :继承一个类
其他关键字:http://www.runoob.com/java/java-basic-syntax.html
三,基本数据类型
声明变量个几种格式:
数据类型 变量名
数据类型 变量名 = 变量值
数据类型 变量名1,变量名2,变量名3....:同时声明多个变量
数据类型 变量名1= 变量值1,变量名2= 变量值2,变量名3= 变量值3....:同时声明多个变量
int a, b, c; // 声明三个int型整数:a、 b、c int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值 byte z = 22; // 声明并初始化 z String s = "runoob"; // 声明并初始化字符串 s double pi = 3.14159; // 声明了双精度浮点型变量 pi char x = 'x'; // 声明变量 x 的值是字符 'x'。
整数类型:
int newtest = 1
byte:八位的数据类型,带有符号,默认值为0,范围(-128(-2^7)- 127(2^7-1)),byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一
short:16位数据类型,有符号的以二进制补码表示的整数,范围(-32768(-2^15)- 32767(2^15 - 1)),Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一
int:32位数据类型,有符号的以二进制补码表示的整数,范围(-2,147,483,648(-2^31)- 2,147,483,647(2^31 - 1)),一般的整数类型默认是int类型
long:64位数据类型,有符号的以二进制补码表示的整数,范围(-9,223,372,036,854,775,808(-2^63) - 9,223,372,036,854,775,807(2^63 -1)),这种类型主要使用在需要比较大整数的系统上,默认值是 0L
例子: long a = 100000L,Long b = -200000L。
浮点类型
float f1 = 234.5f
float:数据类型是单精度、32位、符合IEEE 754标准的浮点数,float 在储存大型浮点数组的时候可节省内存空间,默认值是 0.0f
double:数据类型是双精度、64 位、符合IEEE 754标准的浮点数,浮点数的默认类型为double类型,默认值是 0.0d
例子:double d1 = 123.4
boolean:布尔类型,数据类型表示一位的信息,只有两个取值:true 和 false,默认值是 false
boolean one = true
char:字符类型,是一个单一的 16 位 Unicode 字符,范围(\u0000(即为0)- \uffff(即为65,535)),char 数据类型可以储存任何字符
char letter = 'A'
实例:
public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE); System.out.println("包装类:java.lang.Byte"); System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE); System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE); System.out.println(); // short System.out.println("基本类型:short 二进制位数:" + Short.SIZE); System.out.println("包装类:java.lang.Short"); System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE); System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE); System.out.println(); // int System.out.println("基本类型:int 二进制位数:" + Integer.SIZE); System.out.println("包装类:java.lang.Integer"); System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE); System.out.println(); // long System.out.println("基本类型:long 二进制位数:" + Long.SIZE); System.out.println("包装类:java.lang.Long"); System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE); System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE); System.out.println(); // float System.out.println("基本类型:float 二进制位数:" + Float.SIZE); System.out.println("包装类:java.lang.Float"); System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE); System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE); System.out.println(); // double System.out.println("基本类型:double 二进制位数:" + Double.SIZE); System.out.println("包装类:java.lang.Double"); System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE); System.out.println(); // char System.out.println("基本类型:char 二进制位数:" + Character.SIZE); System.out.println("包装类:java.lang.Character"); // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台 System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE); // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台 System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE); } }
结果:
基本类型:byte 二进制位数:8 包装类:java.lang.Byte 最小值:Byte.MIN_VALUE=-128 最大值:Byte.MAX_VALUE=127 基本类型:short 二进制位数:16 包装类:java.lang.Short 最小值:Short.MIN_VALUE=-32768 最大值:Short.MAX_VALUE=32767 基本类型:int 二进制位数:32 包装类:java.lang.Integer 最小值:Integer.MIN_VALUE=-2147483648 最大值:Integer.MAX_VALUE=2147483647 基本类型:long 二进制位数:64 包装类:java.lang.Long 最小值:Long.MIN_VALUE=-9223372036854775808 最大值:Long.MAX_VALUE=9223372036854775807 基本类型:float 二进制位数:32 包装类:java.lang.Float 最小值:Float.MIN_VALUE=1.4E-45 最大值:Float.MAX_VALUE=3.4028235E38 基本类型:double 二进制位数:64 包装类:java.lang.Double 最小值:Double.MIN_VALUE=4.9E-324 最大值:Double.MAX_VALUE=1.7976931348623157E308 基本类型:char 二进制位数:16 包装类:java.lang.Character 最小值:Character.MIN_VALUE=0 最大值:Character.MAX_VALUE=65535
Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的"E+数字"表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314
引用类型: 是指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定一个数据类型,一旦被指定类型后,这个变量的数据类型就不能改变。
引用数据类型主要用于对象和数组,默认值为null。
一个引用变量可以用来引用任何与之兼容的类型
public class Test { public static void main(String []args) { //private私有修饰符 HelloWorld newHello= new HelloWorld(); int test = newHello.newtest();//main方法是java项目的整个入口 System.out.println(test); } }
值类型:声明变量时指定数据类型,但是数据类型之间时可以进行转换的。
public class Test { public static void main(String []args) { //private私有修饰符 HelloWorld newHello= new HelloWorld(); int test = 123; long test_1 = (long)test; System.out.println(test); } }
四,常量
常量:常量主要是利用final关键字(在Java类中灵活使用Static关键字)来定义常量(https://zhidao.baidu.com/question/261280295.html)
public class Test { public static void main(String []args) { //private私有修饰符 // HelloWorld newHello= new HelloWorld(); // int test = 123; // long test_1 = (long)test; final double PI = 3.1415927; System.out.println(PI); } }
注:常量被设定后,一般情况下就不允许再进行更改
当使用常量的时候,前缀 0 表示 8 进制,而前缀 0x 代表 16 进制
public class Test { public static void main(String []args) { //private私有修饰符 int decimal = 100; int octal = 0144; int hexa = 0x64; System.out.println(decimal); System.out.println(octal); System.out.println(hexa); } }
java的常量包含两个引号之间的字符
public class Test { public static void main(String []args) { //private私有修饰符 String decimal = "Hello World"; String octal = "two\nlines"; String hexa = "\"This is in quotes\""; System.out.println(decimal); System.out.println(octal); System.out.println(hexa); } }
字符串常量和字符常量都可以包含任何Unicode字符
char a = '\u0001'; String a = "\u0001";
Java语言支持一些特殊的转义字符序列。
符号 | 字符含义 |
---|---|
\n | 换行 (0x0a) |
\r | 回车 (0x0d) |
\f | 换页符(0x0c) |
\b | 退格 (0x08) |
\0 | 空字符 (0x20) |
\s | 字符串 |
\t | 制表符 |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜杠 |
\ddd | 八进制字符 (ddd) |
\uxxxx | 16进制Unicode字符 (xxxx) |
五,自动类型转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级:byte,short,char—> int —> long—> float —> double
数据类型转换必须满足如下规则:
-
1. 不能对boolean类型进行类型转换。
-
2. 不能把对象类型转换成不相关类的对象。
-
3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
-
4. 转换过程中可能导致溢出或损失精度,例如:
public class Test { public static void main(String []args) { //private私有修饰符 HelloWorld newHello= new HelloWorld(); int test = 123; long test_1 = (long)test; System.out.println(test);
int i =128;
byte b = (byte)i;
} }
浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
int i =128; byte b = (byte)i;
自动转换类型必须先要满足条件,才能进行转换
public class ZiDongLeiZhuan{ public static void main(String[] args){ char c1='a';//定义一个char类型 int i1 = c1;//char自动类型转换为int System.out.println("char自动类型转换为int后的值等于"+i1); char c2 = 'A';//定义一个char类型 int i2 = c2+1;//char 类型和 int 类型计算 System.out.println("char类型和int计算后的值等于"+i2); } }
运行结果为:
char自动类型转换为int后的值等于97 char类型和int计算后的值等于66
解析:c1 的值为字符 a ,查 ASCII 码表可知对应的 int 类型值为 97, A 对应值为 65,所以 i2=65+1=66
强制类型转换:条件是转换的数据类型必须是兼容的,格式:(type)value type是要强制类型转换后的数据类型
public class QiangZhiZhuanHuan{ public static void main(String[] args){ int i1 = 123; byte b = (byte)i1;//强制类型转换为byte System.out.println("int强制类型转换为byte后的值等于"+b); } }
隐含强制类型转换:整数的默认类型是 int;浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f
六,变量类型
在java中所有的变量在使用前,都必须先声明
Java语言支持的变量类型有:
- 类变量:独立于方法之外的变量,用 static 修饰。
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。
- 局部变量:类的方法中的变量。
public class Variable{ static int allClicks=0; // 类变量 String str="hello world"; // 实例变量 public void method(){ int i =0; // 局部变量 } }
Java 局部变量
- 局部变量声明在方法、构造方法或者语句块中;
- 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
- 访问修饰符不能用于局部变量;
- 局部变量只在声明它的方法、构造方法或者语句块中可见;
- 局部变量是在栈上分配的。
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
package com.runoob.test; public class Test{ public void pupAge(){ int age = 0; age = age + 7; System.out.println("小狗的年龄是: " + age); } public static void main(String[] args){ Test test = new Test(); test.pupAge(); } }
实例变量
- 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
- 当一个对象被实例化之后,每个实例变量的值就跟着确定;
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
- 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
- 实例变量可以声明在使用前或者使用后;
- 访问修饰符可以修饰实例变量;
- 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
- 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
- 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
import java.io.*; public class Employee{ // 这个实例变量对子类可见 public String name; // 私有变量,仅在该类可见 private double salary; //在构造器中对name赋值 public Employee (String empName){ name = empName; } //设定salary的值 public void setSalary(double empSal){ salary = empSal; } // 打印信息 public void printEmp(){ System.out.println("名字 : " + name ); System.out.println("薪水 : " + salary); } public static void main(String[] args){ Employee empOne = new Employee("RUNOOB"); empOne.setSalary(1000); empOne.printEmp(); } }
类变量(静态变量)
- 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
- 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
- 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
- 静态变量在第一次被访问时创建,在程序结束时销毁。
- 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。
- 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
- 静态变量可以通过:ClassName.VariableName的方式访问。
- 类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。
import java.io.*; public class Employee { //salary是静态的私有变量 private static double salary; // DEPARTMENT是一个常量 public static final String DEPARTMENT = "开发人员"; public static void main(String[] args){ salary = 10000; System.out.println(DEPARTMENT+"平均工资:"+salary); } }