java基础语法

 java的核心配置:JDK

JDK主要包括三个部分

1、Jre:java的运行环境

2、Java的工具:java的编译器(java.c.exe)、 java执行解释器

3、Java的类库

java开发环境

JDK Java开发工具

JVM Java虚拟机

JRE Java运行环境

 

三者之间的关系
JDK、JRE、JVM三者之间的关系


java程序运行过程

   编写一个.java文件格式的源文件,源文件经过编译器编译成字节码文件(.class文件),字节码文件为二进制,为什么要编译为二进制呢,是因为我们编写的java文件计算机看不懂,计算机只能读取二进制,所以要编译成二进制,毕竟是计算机帮我们运行程序,那么首先得先转换成它能看懂的文件,然后由执行解释器将字节码文件加载到java虚拟机中,.class文件就会在java虚拟机中运行。

   这里就清楚的看到编译和运行的区别,一般在ecilpse中,当点击文件保存时,eclipse会自动将代码进行编译此时已经生成.class文件,点击运行时,编译好的.class文件才会运行。所以,才会有编译错误和运行错误,编译错误在保存.java源文件时,就会出现错误提示,并且程序无法运行,有时候程序编译没有问题,但是运行后出现问题,结果不对,这就是运行错误。

java语言的好处

   java语言最大的好处应该就是跨平台(操作系统)运行了, java源代码编译成字节码文件是不需要平台支持的,但是每个操作系统的JVM是不一样的,不同的JVM都能够翻译二进制文件,所以当你的程序由wondows系统转移到Linux系统时,只需要安装不同的JVM版本,不用更改源代码,就能够将程序跨平台运行。即实现了一次编译,到处运行。

java运行原理

java运行原理

标识符(记住)

  1. 标识符是用于类名、变量名、方法名、对象名、数组名等的命名;
  2. 可以使用英文、数字、下划线_、$符号;
  3. 不能以数字开头;
  4. 不能使用Java关键字或保留字;
  5. 区分大小写;

注意事项:

(1)当声明的类使用public关键字修饰时,源文件名必须和类名保持一致;

(2)一个.java源文件中可以声明多个类,但是只能有一个public修饰的类,文件名要和public修饰的类名保持一致;

(3)类中可以继续声明类,称为内部类;

类的声明与实例化

类必须先定义才能使用。类是创建对象的模板,创建对象也叫类的实例化。
下面通过一个简单的例子来理解Java中类的定义:
 

public class Dog
{
   String name;
   int age;

   void bark()//汪汪叫
   {
       System.out.println("汪汪,不要过来");
   }
   void hungry()
   {
       System.out.println("主人,我饿了");
   }
}

对示例的说明:

  • public 是类的修饰符,表明该类是公共类,可以被其他类访问。
  • class 是定义类的关键字。
  • Dog是类的名称。
  • name,age是类的成员变量,也叫属性;bark(),hungry()是类中的函数,也叫方法。
  • 一个类可以包含以下类型变量:
  • 局部变量:在方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化(分配内存)。成员变量可以被类中的方法和特定类的语句访问。

类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。static也是修饰符的一种

构造方法

在类实例化的过程中自动执行的方法叫做构造方法,它不需要你手动调用。构造方法可以在类实例化的过程中做一些初始化的工作。

构造方法的名称必须与类的名称相同,并且没有返回值。

每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认的构造方法。
 

public class Dog
{
  String name;
  int age;

  //构造方法,没有返回值
  Dog(String name1,int age1)
  {
     name = name1;
     age = age1;
     System.out.println("感谢主人领养了我");
  }

  //普通方法,必须有返回值
  void bark()
  {
     System.out.println("汪汪,不要过来");
  }

  void hungry()
  {
      System.out.println("主人,我饿了");
  }

  public static void main(String[] args)
  {
      //创建对象时传递的参数要与构造方法参数列表对应
      Dog myDog = new Dog("花花",3);
  }
}

运行结果:
感谢主人领养了我

package day23;
/*构造方法
 - 作用是用于初始化参数
 - 所有的数字变量全部设置为0
 - 所有的boolean类型全部设置为false
 - 所有的对象变量全部设置为null
 */
/*
 - 设计自己的构造方法
 -   方法名称必须和类的名称相同
 -   没有返回值
 */
/*
 - 如果自己写了有参的构造方法,那么编译器不会再提供
 - 默认的构造方法了
 - 如果我们还想用无参的构造方法,
 - 那么需要手动实现
 */
public class People 
{
    String name;
    String sex;
    int age;

    //无参的构造方法(可以不写编译器自动加上,前提是没有任何其他构造方法)
    People()//构造方法(可删掉,编译器默认加上)
    {
//      name = null;
//      sex = null;
//      age = 0;
    }

    //有参的构造方法
    People(String name,String sex,int age)
    {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    //部分初始化
    People(String name)
    {
        this.name = name;
    }

    People(String name,int age)
    {
        this.name = name;
        this.age = age;
    }
    public static void main(String[] args)
    {
        People p = new People();
        System.out.println(p.name);
        System.out.println(p.sex);
        System.out.println(p.age);

        People p1 = new People("张三","男",30);
        System.out.println(p1.name+","+p1.sex+","+p1.age);

        People p2 = new People("老王");
        System.out.println(p2.name);

        People p3 = new People("小老虎",3);
        System.out.println(p3.name+","+p2.age);
    }
}

说明:

    构造方法不能被显式调用。
    构造方法不能有返回值,因为没有变量来接收返回值

创建对象

对象是类的一个实例,创建对象的过程也叫类的实例化。对象是以类为模板来创建的。
在Java中,使用new关键字来创建对象,一般有以下三个步骤:

    声明:声明一个对象,包括对象名称和对象类型
    实例化:使用关键字new来创建一个对象。
    初始化:使用new创建对象时,会调用构造方法初始化对象。
    例如:
 

Dog myDog;//声明一个对象
myDog = new Dog("花花",3);//实例化

也可以在声明的同时进行初始化:

Dog myDog = new Dog("花花",3);

访问成员变量和方法

通过已创建的对象来访问成员变量和成员方法,例如:

//实例化
Dog myDog = new Dog("花花",3);
//通过点号访问成员变量
myDog.name;
//通过点号访问成员方法
myDog.bark();

下面的例子演示了如何访问成员变量和方法:

public class Dog
{
  String name;
  int age;

  Dog(String name1,int age1)
  {
     name = name1;
     age = age1;
     System.out.println("感谢主人领养了我");
  }

  void bark()
  {
    System.out.println("汪汪,不要过来");
  }

  void hungry()
  {
    System.out.println("主人,我饿了");
  }

  public static void main(String[] args)
  {
    Dog myDog = new Dog("花花",3);
    //访问成员变量
    String name = myDog.name;
    int age = myDog.age;
    System.out.println("我是一只小狗,我名字叫" + name + ",我" + age + "岁了");
    //访问方法
    myDog.bark();
    myDog.hungry();
  }
}

运行结果:
感谢主人领养了我
我是一只小狗,我名字叫花花,我3岁了
汪汪,不要过来
主人,我饿了

变量声明与使用

变量概述

在程序执行的过程中,在某个范围内其值可以发生改变的量
从本质上讲,变量其实是内存中的一小块区域
变量定义格式

声明语法:

数据类型  变量名 ;

赋值:

变量名 = 值;

数据类型 变量名 = 初始化值; //定义变量就是在内存中分配一块区域用来存放值,数据类型就是规定这块内存区域只能存放指定类型的值
public class Hello{
	
	public static void main(String[] args){
		
		//声明整数类型的a,在内存中创建这个变量

		int a;
		double b;
		double c;
		
		//给变量赋值

		a = 1;
		b = 2;

		System.out.println(a/b);
		
	}

}

函数声明与使用

访问修饰符 返回值类型 函数名称(参数类型 参数名称){
函数体
}例如
 

public void setXXX(String a){//无返回值的带参函数
this.a = a;
}

public String getXXX(String a){//有返回值的带参函数
return a;
}
public void setXXX(){//无返回值的无参函数
String a;
this.a = a;
}
public String getXXX(){//有返回值的无参函数
String a = "";

基本数据类型

基本数据类型(四类八种)

引用数据类型(类,接口,数组)

浮点类型原理:

float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:

 float:

标题1bit(符号位) 8bits(指数位) 23bits(尾数位)

 double:  

1bit(符号位) 11bits(指数位) 52bits(尾数位)标题

 

V=(-1)^符号位 * 尾数位 * 2^指数位

所以,float的指数范围为-128~+127(-2^7~2^7-1),而double的指数范围为-1024~+1023(-2^10~2^10-1),并且指数位是按补码的形式来划分的。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^127,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1023,也即-1.79E+308 ~ +1.79E+308。

float和double的精度是由尾数的位数来决定的。尾数的取值范围为取值范围为[1,2)或[0,1)。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,由于最左为1的一位省略了,这意味着最多能表示8位数: 2*8388608 = 16777216 。有8位有效数字,但绝对能保证的为7位,也即float的精度为7~8位有效数字
double:2^52 = 4503599627370496,一共16位,同理,double的精度为16~17位之所以不能用f1==f2来判断两个数相等,是因为虽然f1和f2在可能是两个不同的数字,但是受到浮点数表示精度的限制,有可能会错误的判断两个数相等!

注意事项:

整数默认是int类型,浮点数默认是double类型.

定义long数据类型的时候,要加l或者L,建议加L.    long i = 10000000000;  会报超出整数过大,因为没加L默认为int类型的值

定义float数据类型的时候,要加f或者F,建议加F    float j = 12.34;    会报可能损失精度,因为12.34默认为double类型,把double类型的值放入float中会损失精度

运算符

 

1、算术运算符

重点掌握:取模(%)、自增自减(++a,a++)

示例代码:

int a = 1;

a++;// 自身增加1 ,  a = a; a=a+1

++a;// 自身增加1,  a = a+1 ; a = a

System.out.println(a++); // 在打印的时候,执行的是a = a,所以打印的结果为1 ,打印结束后 a = a+1;

System.out.println(a);


System.out.println(++a); // 在打印的时候同时执行了 a = a + 1,所以结果为2,打印结束后又执行了 a=a;

System.out.println(a);

 

 

2、关系运算符(条件运算)

3、赋值运算

4、逻辑运算符

5、位运算

代码示例:

// boolean a = 1>2; // false

// boolean b = 1==1;// true

//

// System.out.println(a & b);//短路与

// System.out.println(a | b);//短路或

 

// int a = 3;// 转为二进制:11

// int b = 2;// 转为二进制:10

 

char a = 'a';// 97 -->  1100001

char b = 'b';// 98 -->  1100010

 //         1100000 --> 96

 //         1100011 --> 99

 //         0000011 --> 3

 

System.out.println(a & b);// & 表示对应位都为1,结果为1,否则为0

System.out.println(a | b);// | 表示对应位都为0,结果为0,否则为1

System.out.println(a ^ b);// ^ 表示对应位相同,结果为0,否则为1

异或(^)作为逻辑运算符时,符号两边相同时返回false,两边不同时返回true;

6、条件运算符

语法:

变量类型  变量名 =  条件   A   B  ;

解读:

声明一个变量,当条件为true时,当前变量的值为A,当条件为false时,当前变量的值为B

代码示例:

int a = false ? 1 : 0;

System.out.println(a);

 

 

int week = 6;

String s = (week>=1 && week<=5) ? "去上课":"去LOL";

System.out.println(s);

 

 修饰符

java中的修饰符分为类修饰符,字段修饰符,方法修饰符。根据功能的不同,主要分为以下五种。

1、权限访问修饰符 

public,protected,default,private,这四种级别的修饰符都可以用来修饰类、方法和字段。

2、final修饰符 

final的意思是不可变,他可以修饰类、字段、方法。修饰类后类不能被扩展(extends),也就是不能被继承。修饰字段后字段的值不能被改变,因此如果有final修饰字段,应该对字段进行手动初始化。修饰方法后该方法不能被改变,也就是重写。 

3、abstract修饰符 

abstract是抽象的意思,用来修饰类和方法,修饰类后,该类为抽象类,不能被实例化,必需进行扩展。修饰方法后,该方法为抽象方法必须被子类重写(override)。 

4、static修饰符 

static用来修饰内部类,方法,字段。修饰内部类说明该内部类属于外部类而不属于外部类的某个实例。修饰字段说明该字段属于类而不属于类实例。修饰方法说明该方法属于类而不属于类实例

5、volatile修饰符  

易失 ( 共享 ) 域修饰符 volatile 是用来说明这个成员变量可能被几个线程所控制和修改。也就是说在程序运行过程中,这个成员变量有可能被其它的程序影响或改变它的取值。

注释 

单行注释

语法:

//这一行是注释

多行注释

/*

 * 多行注释

 * 多行注释

 */

文档注释

/**

 * 这是一个测试的类

 * @author 

 *

 */

注释的作用

解释说明程序,提高程序的阅读性

常量分类

字符串常量 用双引号括起来的内容(“HelloWorld”)
整数常量 所有整数(12,-23)
小数常量 所有小数(12.34)
字符常量 用单引号括起来的内容(‘a’,’A’,’0’)
布尔常量 较为特有,只有true和false
空常量 null(数组部分讲解)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值