Java语言入门篇基本概念

Wesley13
• 阅读 764

题言:写下这篇博客主要是回顾从黑马程序员学来的基本概念,并加深对java语言入门知识的理解,希望对于你们有帮助。由于常量、变量、运算符、方法入门、流程控制都很容易理解以及牢记,就不做篇幅去总结。

1、数据类型转换(byte、short、char-->int-->long-->float-->double)

四类八种基本数据类型:

Java语言入门篇基本概念

自动转换:取值范围小的类型自动提升为取值范围大的类型。(byte、short、char运算时直接提升为int)

手动转换(强制转换):取值范围大的可以强制转换为取值范围小的。

2、数组定义和访问

(1)数组的定义:

int[] arr = new int[3];
int[] arr = new int[]{1,2,3,4,5};//已经固定好元素
int[] arr = {1,2,3,4,5};

(2)数组的访问:跟c语言的调用差不多。

(3)常见问题:数组越界异常(抛出ArrayIndexOutOfBoundsException异常)、数组空指针异常(抛出NullPointerException异         常)等

(4)数组作为方法参数和返回值

//数组作为方法参数传递,传递的参数时数组内存的地址
public static void 方法名(int[] arr){}

//数组作为方法返回值,返回的是数组的内存地址
int[] arr = getArray();
public static int [] getArray(){
     int [] arr = {1,2,3,4,5};
     return arr;
}

(5)总结:方法的参数为基本类型时,传递的是数据值,方法的参数是引用类型时,传递的是地址值。

3、类与对象、封装、构造方法

(1)面向对象概述

    面向过程:强调步骤(放衣服-->找盆-->加洗衣粉-->加水-->浸泡10min-->揉一揉-->清洗-->拧干-->晾)

  面向对象:强调对象(对象:洗衣机,放衣服-->开全自动洗衣机-->扔衣服-->按钮-->晾

特点:把复杂的事情简单化,将我们从执行者变成了指挥者。

(2)类和对象

类:是一组相关属性和行为的集合。

属性:一类事物的状态信息。(如:名字、体重、年龄、颜色)

行为:一类事物能够做什么。(如:走、跑、叫)

   对象:是一类事物的具体体现。对象是类的一个实例。

     成员变量:对应事物的属性    成员方法:对应事物的行为。

(3)类与对象的关系

     类是对一类事物的描述,是抽象的。

     对象是一类事物的实例,是具体的。

     类是对象的模板,对象是类的实体。

 (4)成员变量和局部变量区别

      Java语言入门篇基本概念

  (5)封装(将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。)

        封装步骤:

        使用private关键字来修饰成员变量;(也可修饰成员方法,只在本类中才能访问)

        对需要的访问的成员变量,提供对应的一对getxxx方法、setxxx方法。

        封装优化:

        1)this关键字:代表所在类的当前对象的引用(地址值),即对象自己的引用。(方法被哪个对象调用,方法中的this就代表                 那个对象。即谁在调用,this就代表谁)。

        2)构造方法:当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始化值。(无论你是否自定义构                 造方法,java都会自动提供一个无参数构造方法。一旦自己定义了,java默认的就无效)

   (6)ArrayList类(大小可变的数组的实现,存储在内的数据称为元素。)

        格式:ArrayList list = new ArrayList();第二个<>内的数据类型,jdk7以上可以留空。

        常用的元素操作(增、删、查):

        1) add(E e):添加元素到此集合的尾部。

        2)remove(int index) :删除指定位置的元素。

        3)get(in index):获取指定位置的元素。

        4)size():返回此集合中的元素数。

        ArrayList对象不能存储基本类型,只能存储引用类型的数据。

        Java语言入门篇基本概念

4、String类

      定义:

//构造代码
//无参构造
String str = new String();

//通过字符数组构造
char ch[] = {'a','b','c'};
String str2 = new String(ch);

//通过字节数组构造
byte b[] = {97,98,99};
String str3 = new String(b);

    常用功能:

//boolean类型方法:
equals(object ob)//将字符串与指定对象进行比较;
equalsIgnoreCase(String str):忽略大小写进行比较

// int类型方法:
length();//返回字符串的长度
;indexof(String str);//返回子字符串第一次的出现的索引

 //char、String类型方法:
concat(String str);//连接到str字符串的末尾;
charAt(int index);//返回索引处的char值;
subString(int  beginindex);//返回子字符串,从beginindex开始截取字符串到字符串结尾;
replace(CharSequencetarget,CharSequencereplacement);//将与target匹配的字符串使用replacement字符串替换。

//数组类型的方法
public char[] toCharArray();//将此字符串转换为新的字符数组。
public byte[] getBytes();//使用平台的默认字符集将该String编码转换为新的字节数组。
publicString[]split(Stringregex);//将此字符串按照给定的regex(规则)拆分为字符串数组。

5、static关键字

    (1)概述:可以修饰成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的。(即属于类就不需靠对象         来调用。)

      (2)修饰变量和方法

        修饰成员变量:该变量称为类变量,该类中每个对象都共享同一个类变量的值,任何对象都可以更改该类变量的值。

        修饰成员方法:习惯称为静态方法,直接用类名来调用。

        静态方法调用的注意事项:

        1)静态方法可以直接访问类变量和静态方法

        2)静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问类变量或静态方法。

        3)静态方法中不能使用this关键字。

       (3)静态代码块

           定义在成员位置,使用static修饰的代码块{};

           位置:类中方法外。

           执行:随着类的加载而执行一次,优先于main方法和构造方法的执行。

6、继承、super、this、抽象类

       (1)继承:多个类中存在相同属性和行为时,将这些内容单独写在一个类中,然后多个类就不需要再定义这些属性和行为,只           要继承那一个类即可。(子类继承父类的属性和行为,子类可以直接访问父类中的非私有的属性和行为。)

          特点:1)java只支持单继承,不支持多继承。2)java支持多层继承。(顶层父类是Object类。所有的类默认继承Object,作            为父类)3)子类和父类是一种相对的概念。

       (2)继承后的特点--成员变量

          成员变量不重名:如果子类父类出现不重名的成员变量,这时的访问是没有影响的。

          成员变量重名:子类中需要访问父类中非有私有成员变量时,需要使用super关键字,修饰父类成员变量,类似于之前的this

       (3)继承后的特点--成员方法

          成员方法不重名:如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。

          成员方法重名(重写):子类出现与父类相同的方法时,会出现覆盖效果,声明不变,重新实现。

          注意事项:

          1)子类方法覆盖父类方法,必须要保证权限大于等于父类权限。

          2)子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样。

       (4)super和this

          super:代表父类的存储空间标识(可理解为父亲的引用)

          this:代表当前对象的引用(谁调用就代表谁)

          注意:子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。super()和            this()都 必须是在构造方法的第一行,所以不能同时出现。

       (5)抽象类

          抽象方法:没有方法的方法体;      抽象类:包含抽象方法的类。

         抽象的使用和注意事项:

         继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现父类的抽象方               法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。

         1)抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

          理解:假设创建了抽象类的对象,            调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

         2)抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

          理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。

         3)抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类

         理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。

         4)抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。

         理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。

7、接口、多态

      (1)接口:方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要是封装了方法。 

         接口的定义与类的定义方式相似,但是使用interface关键字。它会被翻译成class文件,但一定明确它并不是类,而是另外一种           引用数据类型。

         接口的使用,它不能创建对象,但是可以被实现(implements,类似于被继承)。一个实现接口的类(可以看做事接口的子              类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用犯法了,否则它必须是一个抽象类。

      (2)基本的实现

         类与接口的关系为实现关系,即类是实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,           格式相仿,只是关键词不同,实现使用implements关键字。

         非抽象子类是实现接口:

         1)必须重写接口中所有抽象方法。

         2)继承了接口的默认方法,即可以直接调用,也可以重写。

         接口中的其他成员特点:

         1)接口中,无法定义成员变量,但可以定义常量,其值不可以改变,默认使用public static final修饰。

         2)接口中,没有构造方法,不能创建对象。

         3)接口中,没有静态代码块。

       (3)多态(同一行为,具有多个不同表现形式)

          前提:

          1)继承或者实现。

          2)方法的重写。

          3)父类引用指向子类对象。

       (4)多态的体现:当使用多态方式调用方法时,首先检查父类是否有该方法,如果没有,则编译错误;如果有,执行的时子类            重写后方法。

       (5)多态引用类型转换(分向上转型和向下转型)

//向上转型:子类类型向父类类型向上转换的过程,这个过程是默认的。
父类类型 变量名 = new 子类类型();

//向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。
子类类型 变量名  = (子类类型) 父类变量名;

    为什么要转型:当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子            类拥有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有            的方法,必须做向下转型。

8、final、权限、内部类、引用类型

         (1)final关键字(用于修饰不可改变内容,可以修饰类、方法和变量)

            1)类:被修饰的类,不能被继承。

            2)方法:被修饰的方法,不能被重写。

            3)变量:被修饰的变量,不能被重新赋值。

         (2)权限修饰符

            Java语言入门篇基本概念

           编写代码时,如果没有特殊的考虑,建议这样使用权限:

           1) 成员变量使用private,隐藏细节。

           2)构造方法使用public,方便创建对象。

           3)成员方法使用public,方便调用方法。

        (3)内部类

           将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。(一个事物内部还包含其他事物,就可以             使用内部类这种结构。)

           访问特点:

           1)内部类可以直接访问外部类的成员,包括私有成员。

           2)外部类要访问类的成员,必须要建立内部类的对象。

        (4)匿名内部类:内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的匿名的子类对象。

           前提:匿名内部类必须继承一个父类或者实现一个父接口

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这