zoukankan      html  css  js  c++  java
  • 从c++角度学习JAVA、Android的总结

    本人c++程序员,在进行NDK开发时,遇到java的相关内容,有c++的基础,在学习java时没必要从头看起,毕竟java是由c++进行开发的,在数据结构和语法上基本相同。但是java还是有几个地方和c++有很大不同的,因此在此做了一些总结,介绍了java中特有的几个重要的点,希望c++程序员能快速地对java进行熟悉。

    1、接口     http://blog.csdn.net/wei_zhi/article/details/52738471

    interface,在java语言中是一个抽象类型,是抽象方法的集合。一个类通过继承接口的方式,从而来继承接口的抽象方法。如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口。

    (1)接口必须要有子类,但一个子类可以使用implements实现多个接口;

    (2)接口的子类,必须要覆写接口中的全部抽象方法;

    (3)接口的对象可以利用子类对象向上转型进行实例化

    2、java包   http://blog.csdn.net/fx677588/article/details/52689565

    包建议小写字母开头。

    3、jar包        http://www.blogjava.net/zeroone0/articles/38826.html

    可执行jar包相当于exe,不可执行jar包相当于dll   

    4、abstract和interface

    接口比抽象类更抽象:

    1)类可以实现无限个接口,但只能继承一个抽象类,接口是用来解决多重继承问题的

    2)抽象类中可以存在非抽象的方法,但是接口不能且里面的方法只能是一个声明,必须用public来修饰,没有具体的实现方法。

    3)抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认都是静态常量static final

    4)抽象类是对象的抽象,接口是一种行为规范。

    1)在继承抽象类时,必须覆盖类中的每一个抽象方法。

    2)当父类已经有实际功能的方法时,该方法在子类中可以不必实现,直接引用的方法,子类也可以重写该父类的方法。

    3)而implement一个interface时,一定要实现所有的方法,不可遗漏任何一个。

    4)抽象类不能产生对象,但可以由它的实现类来声明对象。

    在实现接口时,我们也常写一个抽象类,来实现接口中的某些子类所需的通用方法,接着在编写各个子类,即可继承该抽象类来使用,省去在每个都要实现通用的方法的困扰

    5、java的权限

    一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必

    须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。
    至于main()不是必须要放在public类中才能运行程序。

    默认的是default 不需要书写

    public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不
         仅可以跨类访问,而且允许跨包(package)访问。
    private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以
         及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
    protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、
         属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
    default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访
         问。

    6、几个重要的包 

        第一个包:java.lang包。

         该包提供了Java语言进行程序设计的基础类,它是默认导入的包。该包里面的Runnable接口和Object、Math、String、StringBuffer、System、Thread以及Throwable类需要重点掌握,因为它们应用很广。

        第二个包:java.util包。

         该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。

        第三个包:java.io包。

         该包通过文件系统、数据流和序列化提供系统的输入与输出。

        第四个包:java.net包。

         该包提供实现网络应用与开发的类。

        第五个包:java.sql包。

         该包提供了使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API。

        第六个包:java.awt包

        第七个包:javax.swing包。

         这两个包提供了GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。

        第八个包:java.text包。

         提供了与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。

     7.Toast

    toast是Android中用来显示信息的一种机制,和Dialog不一样的是,toast没有焦点,而且显示时间有限,主要面向用户显示提示消息。

    8.AlertDialog和PopupWindow区别

    AlertDialog是非阻塞式对话框;AlertDialog弹出后,后台还可以做事情,而PopupWindow是阻塞式对话框:popupwindow弹出时,程序会等待,在popupwindow退出前,程序一直等待,只有调用了dimiss方法后,popupwindow退出,程序向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。

    9.AssetManager资源管理器

    资源管理器(AssetManager)主要负责统一加载和管理纹理(Texture)、纹理图集(TextureAtlas)、位图字体(BitmapFont)、音乐(music)、音效(sound)等assets文件夹中的资源。

    10.GLSurfaceView

    用于显示3D图像,本身并不提供绘制3d图形的功能,绘制功能由GLSurfaceView.Renderer来完成。是一个视图,继承自SurfaceView。http://blog.csdn.net/chenjie19891104/article/details/6311209

    11、android四大组件

    Activity 、 Service 、ContentProvider 、BroadcastReceiver为四大组件。

    Activity显示一个应用希望呈现给用户的内容;service是应用可以在后台运行的服务组件;contentprovider是应用的数据存储组件;broadcastreceiver是应用获取系统或者获取某些应用发出特定消息的组件

    Activity只能通过setContentView(View)来显示指定组件。   setContentView(layout)

    http://blog.csdn.net/anddlecn/article/details/51424721

    12、Intent

    联系四大组件,联系应用

    13、Manifest

    在应用工程的源码目录下,都有一个AndroidManifest.xml文件,它是这个应用的配置文件,当应用安装到设备上后,android系统会从这个文件中获取很多关于这个应用的配置信息。包含如下信息:

    ①应用程序的包名,该包名作为应用的唯一标识。

    ②应用程序所包含的组件,如Activity  Service   BroadcastReceiver  ContentProvider

    ③应用程序兼容的最低版本

    ④应用程序使用系统所需的权限声明

    ⑤其他程序访问该程序所需的权限声明。

    14、Acivity                           《疯狂android》

    四种状态:

    running状态:一个新的activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。

    paused状态:当activity被另一个透明或者dialog样式的activity覆盖时的状态。仍然可见,失去焦点,不可交互。

    stopped状态:当activity不可见时的状态。一定要保存当前数据和当前的UI状态。

    killed状态:activity呗杀掉后或者被启动前,处于killed状态。

    全生命周期:  onCreate到onDestroy

    可见生命周期:onStart到onStop

    前台生命周期:onResume到onPause

    15 UI相关        《疯狂Android讲义》P40

    把变化小、行为比较固定的组件放在xml布局文件中;把变化大、行为控制复杂的组件交给java代码。

    在Activity中显示视图:  setContentView(R.Layout.<资源文件名字>);

    访问组件:findViewById(R.id.<android.id>);

    16 布局管理器

    android的布局管理器本身就是一个UI组件,所有的布局管理器都是ViewGroup的子类。

    线型布局LinearLayout   表格布局TableLayout  帧布局FrameLayout 相对布局RelativeLayout

    绝对布局AbsoluteLayout

    17界面组件

    基本:文本框(TextView)  编辑框(EditText)按钮(Button)图片按钮(ImageButton)

               单选按钮(Radiobutton)复选框(CheckBox)状态开关按钮(ToggleButton)

               时钟(AnalogClock和DigitalClock)图像视图(ImageView)

    高级:自动完成文本框(AutoCompleteTextView) 列表选择框(Spinner)

       日期、时间选择器(DataPicker和TimePicker)进度条(ProgressBar)

                拖动条(SeekBar)星级评分条(RatingBar)选项卡(TabHost)滚动视图(ScrollView)

       列表视图(ListView和ListActivity)

    对话框:AlertDialog非阻塞式对话框  ProgressDialog进度对话框 DatePickerDialog 日期选择对话框

                   TimePickDialog时间选择对话框

    18 事件处理

    基于监听的事件处理: eventsource事件源    event事件   eventlistener事件监听器

    ①获取普通界面组件(事件源),也就是被监听的对象。

    ②实现事件监听器类,该监听器类是一个特殊的java类,必须实现一个xxxListener接口

    ③调用事件源的setXXXListener方法将事件监听器对象注册给普通组件(事件源)。

    基于回调的事件处理:重写组件的事件响应方法

    19Handler消息传递机制

    Handler类的作用:在新启动的线程中发送消息;在主线程中获取、处理消息

    20资源

    android应用资源可分为两大类:无法直接访问的原生资源,保存在asset下;可通过R资源清单类访问的资源,保存在res目录下。

    ①java中使用资源:

    R类为res目录下所有资源创建索引项     <package_name>R.<resource_type>.<resource_name>

    ②在xml中使用资源:

    @[<package_name>:]<resource_type>/<resource_name>

     21图形与图像处理

    android的图片资源不仅包含png、jpg、gif等格式的位图,也包括使用xml资源文件定义的各种Drawable对象。  R.drawable.file_name。

    Canvas代表了依附于指定View的画布;Paint代表了Canvas上的画笔。

    双缓冲技术:当程序需要在指定View上进行绘制时,程序并不直接绘制到该view上,而是先绘制到一个内存中的Bitmap图片(这就是缓冲)上,等到内存中的bitmap绘制好了之后,再一次性将bitmap绘制到view上。

    Matrix是Android提供的一个矩阵工具类,它本身并不能对图像或组件进行变换,但它可与其他API结合来控制图形、组件的变换。使用Matrix控制图像或组件变换的步骤为:

    ①获取Matrix对象,该对象既可新建,也可直接获取其他对象内封装的Matrix

    ②调用Matrix的方法进行平移、旋转、缩放、倾斜等

    ③将程序对Matrix所做的变换应用到指定图像或组件

    SurfaceView一般会与SurfaceHolder结合使用,SurfaceHolder用于向与之关联的SurfaceView上绘图,调用SurfaceView的getHolder()方法可获取SurfaceView关联的SurfaceHolder。

    22 OpenGL ES

    android的三维坐标系统中:

    坐标原点位于中央,X轴从左向右延伸,原点左边的值为负,原点右边为正;

    Y轴从下向上延伸,原点下边为负,上边为正;Z轴屏幕里面向外面延伸,里面为负,外面为正。

    ES1针对固定管线硬件;ES2针对可编程管线硬件。

    Android为OpenGL  ES支持提供了GLSurfaceView组件,这个组件用于显示3D图形,GLSurfaceView.Renderer完成在SurfaceView中对3D图形的绘制。

    android中使用OpenGL ES的三个步骤:

    ①创建GLSurfaceView组件,使用Activity来显示GLSurfaceView组件。

    ②为GLSurfaceView组件创建GLSurfaceView.Renderer实例,实现GLSurfaceView.Renderer类时需要实现该接口里的三个方法。 onDrawFrame  绘制当前帧;onSurfaceChaged 大小变化时回调;onSurfaceCreated 当GLSurfaceView创建时调用

    ③调用GLSurfaceView组件的setRenderer()方法指定renderer对象,该对象完成GLSurfaceView里3D图形的绘制。

    难点在于如何实现renderer类。绘制3D图形不仅需要定义各顶点位置的坐标,还需要定义3D图形的各个三角面由哪些顶点组成。

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////——————————————分割线,下面是java的基本知识

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    15 封装类

    在jdk中针对各种基本数据类型分别定义相应的引用类型,为封装类。基本数据类型只能按值传递,封装类按引用传递。封装类可以将基本数据类型封装成对象。基本类型在堆栈上创建,而对象类型在堆上创建(对象的引用在堆栈上创建)。在堆栈上分配内存效率高,但有内存泄漏的问题。

    封装类还可实现基本类型变量和字符串之间的转换。把字符串类型转换为基本类型的方式 :

    ①利用封装类提供的parseXxx(String s)静态方法。②利用封装类的构造器Xxx(String s).

    把基本类型转换为字符串的方式:   String.valueOf()

    16 final

    对于一个final变量,如果是基本数据类型的变量,则初始化后不能更改;如果是引用类型的变量,则在初始化后不能再指向另一个对象。

    17 多态

    如果一个引用类型变量声明为父类的类型,但实际引用的是子类的对象,那么该变量就不能再访问子类中添加的属性和方法。

    18 嵌套类   内部类  http://blog.csdn.net/hguisu/article/details/7270086  《疯狂java讲义》P199

    嵌套类(nested class)有两种类型:静态嵌套类和非静态嵌套类(内部类inner)。

    外部类中的内部类:①对于内部类,定义类的class时不加public或private,加了没有任何影响

    ②内部类中可以直接访问外部类的数据成员和方法。③内部类只在外部类的作用域内可知,类外不可用内部类。外部类或同层次的内部类在访问内部类时,需进行实例化内部类。

    内部类在使用时必须实例化。子类要想使用父类的内部类时,父类必须实例化内部类作为属性或包含在方法中。OurterInstance.new InnerConstructor().

    在外部类以外创建内部类对象时,对于静态内部类只需使用外部类即可调用构造器,对于非静态内部类必须使用外部类对象类调用构造器。

    方法内部类:①方法内部类只能在定义该内部类的方法内实例化,不可在此方法外对其实例化。②方法内部类对象不能使用该内部类所在方法的非final局部变量。

    匿名内部类   https://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html

    19 修饰符的适用范围

    20 JAVA线程通信

    java中多线程机制通过虚拟CPU实现,java的线程通过java.lang.thread类来实现,它内部实现了虚拟CPU的功能,能够接收和处理传递给它的代码和数据,并提供了独立的运行控制功能。每个java应用程序都至少有一个线程,这就是主线程。java中创建线程的一种方式是通过Thread实现,另一种是通过runnable接口并实现接口中定义的唯一方法run(),可以定义一个线程。

    21 instanceof运算符

    在强制类型转换前,首先判断前一个对象是否是后一个类的实例,是否可以成功转换,保证代码健壮性。

    22 Lambda表达式

    Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(函数式接口)的实例。

    形参列表。允许省略形参类型。如果形参列表中只有一个参数,甚至连形参表的圆括号也可以省略

    箭头->。

    代码块。如果代码块只含一条语句,Lambda表达式允许省略代码块的花括号。

    23 枚举类    P220

    enum定义枚举类,可以有自己的成员变量、方法。一个java源文件中最多只能定义一个public访问权限的枚举类,且该java源文件必须和枚举类的类名相同。 values()返回该枚举类的所有实例。EnumName.VALUE   

    24 对象在内存中的状态

    可达状态;可恢复状态;不可达状态。

    25 布局管理器LayoutManager

    FlowLayout   BorderLayout  GridLayout GridBagLayout  CardLayout BoxLayout

    26 基本组件

    Canvas用于绘图的画布;Choice下拉式选择框组件;

    27 事件处理

    Event Source(事件源)   Event(事件)   EventListener(事件监听器)

    AWT的事件处理机制是一种委派式(Delegation)事件处理方式——普通组件(事件源)将事件的处理工作委托给特定的对象(事件监听器);当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件。

    事件适配器     匿名内部类实现监听器

    28 Swing组件

    swing组件采用MVC(model-view-controller,即模型-视图-控制器)设计模式,其中模型model用于维护组件的各种状态,视图view是组件的可视化表现,控制器controller用于控制对各种事件、组件做出怎样的响应。

    JComponent抽象类

  • 相关阅读:
    管道通讯
    C++类型转换
    自定义数组容器MyArray框架
    vue 转场动画
    身份证信息 获取年龄性别生日
    element ui +vue 输入 身份证号获取 性别 年龄 籍贯
    获取地理位置
    post 下载二进制pdf文件
    post 文件下载二进制流
    遍历对象的几中方法
  • 原文地址:https://www.cnblogs.com/hanmolabi/p/7810080.html
Copyright © 2011-2022 走看看