Java基础

38 篇文章 0 订阅

一.java基础部分(基本语法,java特性)

1.标识符

1)、只能由字母(a-z,A-Z),数字(0-9),下划线(_)和美元符号($)组成

2)、不能以数字开头

3)、不能与关键字重名

4)、严格区分大小写

2.常量与变量

1)、变量的三个元素:变量类型,变量名,和变量值

驼峰命名法:

1.小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog;

2.大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、LastName;

3.不过在程序员中还有一种命名法比较流行,就是用下划线“_”来连接所有的单词,比如send_buf

2)常量:常量代表程序执行过程中不能改变的数据。

                我们可以把它理解成一种特殊的变量,只不过它的值被设定后,在程序运行过程中不允许被改变。

3.数据类型

byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。

short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。

int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。

long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。

float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。

double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。

boolean:只有true和false两个取值。

char:16位,存储Unicode码,用单引号赋值。

简单类型

boolean

byte

char

short

Int

long

float

double

 

二进制位数

1

8

16

16

32

64

32

64

 

封装器类

Boolean

Byte

Character

Short

Integer

Long

Float  

Double

 

Java引用类型

Java有 5种引用类型(对象类型):类 接口 数组 枚举 标注

引用类型:底层结构和基本类型差别较大

JVM的内存空间:

(1). Heap 堆空间:分配对象 new Student()

(2). Stack 栈空间:临时变量 Student stu

(3).Code 代码区 :类的定义,静态资源 Student.class

eg:Student stu = new Student(); //new 在内存的堆空间创建对象

       stu.study(); //把对象的地址赋给stu引用变量

上例实现步骤:

     a.JVM加载Student.class 到Code区

     b.new Student()在堆空间分配空间并创建一个Student实例;

     c.将此实例的地址赋值给引用stu, 栈空间;

4.运算符

5.流程控制语句

选择结构:

  也叫分支结构 根据条件的不同,有选择的执行某一片代码 ,Java提供了两种  if结构    switch结构 

if的第一种格式

  if(条件){
    语句块
  }

if的第二种格式:

if(条件){

  语句块 1

}else{

  语句块2

}

if语句的第三种格式:

if(条件1){

  语句块1
}else if(条件2){

  语句块2
}else if(条件3){
  语句块3
}
...
else if(条件n){

  语句块n
}else{

  语句块n+1
}

选择结构switch

语法结构

switch(表达式){
case 目标值1:
    语句块1
    break;
case 目标值2:
    语句块2
    break;
case 目标值3:
    语句块3
    break;
...
case 目标值n:
    语句块n+1
    break;
default:
    语句块n+1
    break;

}

for循环:
for(初始化语句;条件;步进表达式){
  循环体
}

while 循环:
初始化语句
while(条件){
  循环体
  步进语句
}

do ... while循环
初始化语句
do{
  循环体
  步进语句
}while(条件)

跳转语句可以控制循环的执行:
break : 在循环中使用的时候 表示结束当前循环
在switch语句中使用 表示跳出当前的switch结构

continue: 在循环中使用, 表示结束本次循环 进行下一次循环
跳转语句 脱离循环没有意义

6.方法

7.数组

声明数组变量:dataType[] arrayRefVar; // 首选的方法

                         dataType arrayRefVar[]; // 效果相同,但不是首选方法

eg: // 定义数组 double[] myList = new double[2];

                         myList[0] = 5.6;   myList[1] = 4.5;

或者:              double[] myList = {1.9, 2.9, 3.4, 3.5};

// 打印所有数组元素

for (double element: myList) {

      System.out.println(element);

}

8.注释

二.关键字

三.面向对象

1.面向对象思想

             Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。

    这里的对象泛指现实中一切事物,每种事物都具备自己的属性行为

    面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。

              面向对象的语言中,包含了三大基本特征,即 封装、继承 和 多态。 

2.类与对象

  •     :是一组相关 属性 和 行为 的集合。可以看成一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
  •    属性:就是该事物的状态信息。
  •    行为:就是该事物能够做什么。
  •    对象:是一类事物的具体体现。 对象是类的一个 实例,必然具备该类事物的属性和行为。
  •     3、类与对象的关系
    •       是对一类事物的描述,是 抽象 的。
    •     对象 是一类事物的实例,是 具体 的。
    •     类是对象的模板,对象是类的实体。 

3.成员变量和局部变量

成员变量(存在于堆内存中,和类一起创建)

局部变量(存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存)

4.匿名对象

匿名对象:没有名字的对象

匿名对象的特征:
      语法上: 只创建对象,但是不用变量来接收

      匿名对象的使用:
             1.匿名对象也是一个对象,具有对象的所有功能
             2.每一次使用匿名对象时,都是一个新的对象, 每次创建匿名对象都是不同的对象,一个匿名对象,只能使用一次,即匿名对象只能调用一次

     匿名对象只在堆内存中开辟空间,而不存在栈内存的引用

匿名类(匿名内部类)

     如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用

如我们需要一个监听类,并且在实例化这个监听类的时候才需要实现这个监听类内部的方法,那么使用匿名类就最方便了

5.封装

将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

6.this关键字

this关键字指向的是当前对象的引用

1. 如果存在同名成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据。
2. 在一个构造函数中可以调用另外一个构造函数初始化对象。

7.构造方法

1). 构造方法的方法名必须与类名一样。
2). 构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
3). 构造方法不能作用是完成对象的初始化工作,他能够把定义对象时的参数传递给对象的域。
4). 构造方法不能由编程人员调用,而要系统调用。
5). 构造方法可以重载,以参数的个数,类型,或排序顺序区分。

8.继承

继承是类与类的一种关系,例如:动物和狗的关系,动物是父类(或基类),狗是子类(或派生类)。

要注意的是,在Java中的继承是单继承,也就是说一个儿子只能有一个爸爸

继承的好处:

  子类拥有父类的所有属性和方法(private除外)

  子类对父类代码的复用

继承的语法规则:

  class  子类  extends  父类    #如: class  Dog extends Animal{ ......  }

方法的重写:

1、什么是方法的重写:

  如果子类对继承父类的方法不满意,是可以重从写父类继承的方法,当调用时会优先调用子类的方法。

2、语法规则:

  返回值类型、方法名、参数类型及个数 都要与从父类继承的方法相同,才叫方法的重写。

继承的初始化顺序:

  若创建一个子类对象,系统会先创建父类的属性进行初始化,再调用父类的构造方法,然后再创建子类的属性进行初始化,最后调用子类的构造方法。

\

\

9.多态

多态指对象的多种引用形态,继承是多态的前提

1、引用多态

  父类的引用可以指向本类对象  Animal object1=new Animal();

  父类的引用可以指向子类对象  Animal object2=new Dog();

  注意:子类的引用不可以指向父类对象 Dog object3=new Animal();

2、方法多态

  创建本类对象时,调用的方法为本类的方法;

  创建子类对象时,调用的为方法为子类重写的方法或者继承的方法

  注意:本类对象不能调用子类的方法

10.抽象类

1).抽象方法与抽象类必须由abstract修饰符修饰,同时,抽象方法不能拥有方法体;
2).抽象类无法实例化,不能由new来调用抽象类的构造器来创建实例;
3).抽象类可以有①成员变量、②方法(普通方法和抽象方法都可以)、③构造器(不能用于创建实例,限于被子类调用)、④初始化块、⑤内部类(接口、枚举);
4).含有抽象方法的类只能被定义为抽象类。

11.接口

定义:Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口的特点

1、Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)

2、Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化

3、Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法

4、接口中没有构造方法,不能被实例化

5、一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口

6、Java接口必须通过类来实现它的抽象方法

7、当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类

8、不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

9、一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.

12.内部类

可以将一个类的定义放在另一个类的定义内部,这就是内部类。

每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类没有影响。

接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。

成员内部类:

public class OuterClass {
    private String name ;
    private int age;

    /**省略getter和setter方法**/
    
    public class InnerClass{
        public InnerClass(){
            name = "chenssy";
            age = 23;
        }
        
        public void display(){
            System.out.println("name:" + getName() +"   ;age:" + getAge());
        }
    }
    
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        OuterClass.InnerClass innerClass = outerClass.new InnerClass();
        innerClass.display();
    }
}


--------------
Output:
name:chenssy   ;age:23

局部内部类:

有这样一种内部类,它是嵌套在方法和作用于内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。

定义在方法里:

public class Parcel5 {
    public Destionation destionation(String str){
        class PDestionation implements Destionation{
            private String label;
            private PDestionation(String whereTo){
                label = whereTo;
            }
            public String readLabel(){
                return label;
            }
        }
        return new PDestionation(str);
    }
    
    public static void main(String[] args) {
        Parcel5 parcel5 = new Parcel5();
        Destionation d = parcel5.destionation("chenssy");
    }
}

定义在作用域内:

public class Parcel6 {
    private void internalTracking(boolean b){
        if(b){
            class TrackingSlip{
                private String id;
                TrackingSlip(String s) {
                    id = s;
                }
                String getSlip(){
                    return id;
                }
            }
            TrackingSlip ts = new TrackingSlip("chenssy");
            String string = ts.getSlip();
        }
    }
    
    public void track(){
        internalTracking(true);
    }
    
    public static void main(String[] args) {
        Parcel6 parcel6 = new Parcel6();
        parcel6.track();
    }
}

匿名内部类:

public class OuterClass {
    public InnerClass getInnerClass(final int num,String str2){
        return new InnerClass(){
            int number = num + 3;
            public int getNumber(){
                return number;
            }
        };        /* 注意:分号不能省 */
    }
    
    public static void main(String[] args) {
        OuterClass out = new OuterClass();
        InnerClass inner = out.getInnerClass(2, "chenssy");
        System.out.println(inner.getNumber());
    }
}

interface InnerClass {
    int getNumber();
}

四.集合

Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
│—————-└ Vector 接口实现类 数组, 同步, 线程安全
│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树,元素排好序

Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类, 同步, 线程安全
├———HashMap 接口实现类 ,没有同步, 线程不安全-
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–└ WeakHashMap
├ ——–TreeMap 红黑树对所有的key进行排序
└———IdentifyHashMap

这里写图片描述

这里写图片描述
(1)ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素
(2)LinkedList 底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素
(3)Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值