菜鸟教程 + Java基础课程 + part1

                      菜鸟教程 + Java基础课程  + part1

目录

一 Java基础语法

1. 类、对象、方法和实例变量的概念

2. 编写 Java 程序时,应注意以下几点

3. Java标识符

4. Java注释

5. Java 源程序与编译型运行区别

二 Java基本数据类型

1. 内置数据类型

2. 引用数据类型

3. 常量

4. 自动类型转换

5. 强制类型转换

三 Java变量类型

四 Java修饰符

1. 访问控制修饰符

2. 非访问修饰符

五 Java运算符

1. 算术运算符

2. 关系运算符

3. 位运算符

4. 逻辑运算符

5. 赋值运算符

6. 条件运算符

7. instanceof运算符

8. 运算符优先级

六 Java循环结构

1. while循环

2. do...while循环

3. for循环

4. Java增强for循环

5. break关键字

6. continue关键字

七、Java条件结构

1. if...else 语句

2. switch  case 语句


 

一 Java基础语法

1. 类、对象、方法和实例变量的概念

1)对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
2):类是一个模板,它描述一类对象的行为和状态。
3)方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
4)实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。

2. 编写 Java 程序时,应注意以下几点

1)大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
2)类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
3)方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
4)源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
5)主方法入口:所有的 Java 程序由 public static void main(String []args) 方法开始执行。

3. Java标识符

Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

注意:

1)所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
2) 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
3)关键字不能用作标识符
4)标识符是大小写敏感的
5)合法标识符举例:age、$salary、_value、__1_value
6)非法标识符举例:123abc、-salary

4. Java注释

类似于 C/C++、Java 也支持单行以及多行注释。注释中的字符将被 Java 编译器忽略。


public class HelloWorld {
   /* 这是第一个Java程序
    *它将打印Hello World
    * 这是一个多行注释的示例
    */
    public static void main(String []args){
       // 这是单行注释的示例
       /* 这个也是单行注释的示例 */
       System.out.println("Hello World"); 
    }
}

5. Java 源程序与编译型运行区别

二 Java基本数据类型

1. 内置数据类型

 数据类型二进制位数默认值从包装类获取位数和最值
数字类型byte80

Byte.SIZE  Byte.MIN_VALUE

Byte.MAX_VALUE

short160

Short.SIZE

Short.MIN_VALUE

Short.MIN_VALUE

int320

Integer.SIZE

Integer.MIN_VALUE

Integer.MAX_VALUE

long640L

Long.SIZE

Long.MIN_VALUE

Long.MAX_VALUE

float320.0f 
doble640.0d 
布尔型boolean见注'u0000' 
字符型char16false

Character.SIZE

Character.MIN_VALUE

Character.MAX_VALUE

注:

    《Java虚拟机规范》一书中描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。

    这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。

    使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。

2. 引用数据类型

在Java中,引用类型的变量非常类似于C/C++的指针。
对象、数组都是引用数据类型。
所有引用类型的默认值都是null。

3. 常量

常量在程序运行时是不能被修改的。
在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:

final double PI = 3.1415927;

为了便于识别,通常使用大写字母表示常量。
字面量可以赋给任何内置类型的变量。例如:

byte a = 68;
char a = 'A'

和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列:

"Hello World"
"two\nlines"
"\"This is in quotes\""

注:字面量是指由字母,数字等构成的字符串或者数值,它只能作为右值出现

4. 自动类型转换

必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。

5. 强制类型转换

 1)条件是转换的数据类型必须是兼容的

 2)格式:(type)value type是要强制类型转换后的数据类型

 3)浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入

 4)整数的默认类型是 int。浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。

三 Java变量类型

Java语言支持的变量类型有:

    类变量:独立于方法之外的变量,用 static 修饰。
    实例变量:独立于方法之外的变量,不过没有 static 修饰。
    局部变量:类的方法中的变量。

四 Java修饰符

Java语言提供了很多修饰符,主要分为以下两类:

  • 访问控制修饰符
  • 非访问修饰符

1. 访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

1)default

使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。

2)public

被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。

如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。

Java 程序的 main() 方法必须设置成公有的,否则,Java 解释器将不能运行该类。

3)private

私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。

声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。

private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

下面的类使用了私有访问修饰符:


public class Logger {
   private String format;
   public String getFormat() {
      return this.format;
   }
   public void setFormat(String format) {
      this.format = format;
   }
}

实例中,Logger 类中的 format 变量为私有变量,所以其他类不能直接得到和设置该变量的值。为了使其他类能够操作该变量,定义了两个 public 方法:getFormat() (返回 format的值)和 setFormat(String)(设置 format 的值)。

4)protected

protected 需要从以下两个点来分析说明:

  • 子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;
  • 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。

protected 可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外)

接口及接口的成员变量和成员方法不能声明为 protected。

子类能访问 protected 修饰符声明的方法和变量,这样就能保护不相关的类使用这些方法和变量。

下面的父类使用了 protected 访问修饰符,子类重写了父类的 openSpeaker() 方法。


class AudioPlayer {
   protected boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}
 
class StreamingAudioPlayer extends AudioPlayer {
   protected boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}

如果把 openSpeaker() 方法声明为 private,那么除了 AudioPlayer 之外的类将不能访问该方法。

如果把 openSpeaker() 声明为 public,那么所有的类都能够访问该方法。

如果我们只想让该方法对其所在类的子类可见,则将该方法声明为 protected。

补充:访问控制和继承

请注意以下方法继承的规则:

    父类中声明为 public 的方法在子类中也必须为 public。

    父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。

    父类中声明为 private 的方法,不能够被继承。

2. 非访问修饰符

为了实现一些其他的功能,Java 也提供了许多非访问修饰符。

1)static

用来修饰类方法和类变量。

  • 静态方法:

    static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。

  • 静态变量:

    static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。

如下例所示,static修饰符用来创建类方法和类变量。


public class InstanceCounter {
   private static int numInstances = 0;
   protected static int getCount() {
      return numInstances;
   }
 
   private static void addInstance() {
      numInstances++;
   }
 
   InstanceCounter() {
      InstanceCounter.addInstance();
   }
 
   public static void main(String[] arguments) {
      System.out.println("Starting with " +
      InstanceCounter.getCount() + " instances");
      for (int i = 0; i < 500; ++i){
         new InstanceCounter();
          }
      System.out.println("Created " +
      InstanceCounter.getCount() + " instances");
   }
}

运行结果:
Starting with 0 instances
Created 500 instances

2)final

用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。

  •  final类

    final 类不能被继承,没有类能够继承 final 类的任何特性。


public final class Test {
   // 类体
}
  • final方法

    类中的 final 方法可以被子类继承,但是不能被子类修改。

    声明 final 方法的主要目的是防止该方法的内容被修改。

    如下所示,使用 final 修饰符声明方法。


public class Test{
    public final void changeName(){
       // 方法体
    }
}
  • final变量

    final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。

    final 修饰符通常和 static 修饰符一起使用来创建类常量。


public class Test{
  final int value = 10;
  // 下面是声明常量的实例
  public static final int BOXWIDTH = 6;
  static final String TITLE = "Manager";
 
  public void changeValue(){
     value = 12; //将输出一个错误
  }
}

3)abstract

用来创建抽象类和抽象方法。

  • 抽象类

    抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。

    一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。

    抽象类可以包含抽象方法和非抽象方法。


abstract class Caravan{
   private double price;
   private String model;
   private String year;
   public abstract void goFast(); //抽象方法
   public abstract void changeColor();
}
  • 抽象方法

    抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。

    抽象方法不能被声明成 final 和 static。

    任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。

    如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。

    抽象方法的声明以分号结尾,例如:public abstract sample();

4)sunchronized

主要用于线程的编程。

5)volatile

主要用于线程的编程。

五 Java运算符

1. 算术运算符

表格中的实例假设整数变量A的值为10,变量B的值为20:

2. 关系运算符

表格中的实例整数变量A的值为10,变量B的值为20:

3. 位运算符

位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:

A = 0011 1100
B = 0000 1101

下表列出了位运算符的基本运算,假设整数变量A的值为60和变量B的值为13:

注:

左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。

Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。

4. 逻辑运算符

下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假。


注:短路逻辑运算符

    当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。


public class LuoJi{
    public static void main(String[] args){
        int a = 5;//定义一个变量;
        boolean b = (a<4)&&(a++<10);
        System.out.println("使用短路逻辑运算符的结果为"+b);
        System.out.println("a的结果为"+a);
    }
}


运行结果:
使用短路逻辑运算符的结果为false
a的结果为5

5. 赋值运算符

6. 条件运算符

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。


public class Test {
   public static void main(String[] args){
      int a , b;
      a = 10;
      // 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
      b = (a == 1) ? 20 : 30;
      System.out.println( "Value of b is : " +  b );
 
      // 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
      b = (a == 10) ? 20 : 30;
      System.out.println( "Value of b is : " + b );
   }
}


运行结果:
Value of b is : 30
Value of b is : 20

7. instanceof运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。

下面是一个例子:

String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真

如果被比较的对象兼容于右侧类型,该运算符仍然返回true。

看下面的例子:


class Vehicle {}
 
public class Car extends Vehicle {
   public static void main(String[] args){
      Vehicle a = new Car();
      boolean result =  a instanceof Car;
      System.out.println( result);
   }
}

运行结果:
true

8. 运算符优先级

下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。

 

六 Java循环结构

1. while循环

语法:


while( 布尔表达式 ) {
  //循环内容
}

例子:


public class Test {
   public static void main(String args[]) {
      int x = 10;
      while( x < 20 ) {
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }
   }
}

运行结果:
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

2. do...while循环

do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

语法:

do {
       //代码语句
}while(布尔表达式);

例子:


public class Test {
   public static void main(String args[]){
      int x = 10;
 
      do{
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }while( x < 20 );
   }
}


运行结果:
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

3. for循环

Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。

语法:


for(初始化; 布尔表达式; 更新) {
    //代码语句
}

例子:


public class Test {
   public static void main(String args[]) {
 
      for(int x = 10; x < 20; x = x+1) {
         System.out.print("value of x : " + x );
         System.out.print("\n");
      }
   }
}

运行结果:
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

4. Java增强for循环

Java5 引入了一种主要用于数组的增强型 for 循环。

语法:


for(声明语句 : 表达式)
{
   //代码句子
}

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

例子:


public class Test {
   public static void main(String args[]){
      int [] numbers = {10, 20, 30, 40, 50};
 
      for(int x : numbers ){
         System.out.print( x );
         System.out.print(",");
      }
      System.out.print("\n");
      String [] names ={"James", "Larry", "Tom", "Lacy"};
      for( String name : names ) {
         System.out.print( name );
         System.out.print(",");
      }
   }
}

运行结果:
10,20,30,40,50,
James,Larry,Tom,Lacy,

5. break关键字

break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。

break 跳出最里层的循环,并且继续执行该循环下面的语句。

例子:


public class Test {
   public static void main(String args[]) {
      int [] numbers = {10, 20, 30, 40, 50};
 
      for(int x : numbers ) {
         // x 等于 30 时跳出循环
         if( x == 30 ) {
            break;
         }
         System.out.print( x );
         System.out.print("\n");
      }
   }
}

运行结果:
10
20

6. continue关键字

continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。


public class Test {
   public static void main(String args[]) {
      int [] numbers = {10, 20, 30, 40, 50};
 
      for(int x : numbers ) {
         if( x == 30 ) {
        continue;
         }
         System.out.print( x );
         System.out.print("\n");
      }
   }
}

运行结果:
10
20
40
50

七、Java条件结构

1. if...else 语句

语法:


if(布尔表达式 1){
   //如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
   //如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
   //如果布尔表达式 3的值为true执行代码
}else {
   //如果以上布尔表达式都不为true执行代码
}


嵌套语句:

if(布尔表达式 1){
   如果布尔表达式 1的值为true执行代码
   if(布尔表达式 2){
      如果布尔表达式 2的值为true执行代码
   }
}

2. switch  case 语句

switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

语法:


switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}

如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出。


public class Test {
   public static void main(String args[]){
      int i = 1;
      switch(i){
         case 0:
            System.out.println("0");
         case 1:
            System.out.println("1");
         case 2:
            System.out.println("2");
         default:
            System.out.println("default");
      }
   }
}


运行结果:
1
2
default
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值