美文网首页
JAVA学习笔记(二)

JAVA学习笔记(二)

作者: 郡王丶千夜 | 来源:发表于2018-05-06 23:07 被阅读122次

    前言:

    这几天看了Java的基本语法和一些特性,今天就比较下和OC与C的不同点,方便自己记忆。

    一、基本语法

    先从最大的不同点开始,在Java中一个.java文件相当于OC/C的.h和.m,Java类的属性、方法都在一个代码块中,比如下面这段代码

    public class Animal {//Animal类
        //属性
        String name;
        //属性的getter与setter方法
        public void setName(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        //实例方法
        public void eatFood(){
            System.out.println(this.name + "吃饭");
        }
        //方法的重载
        public void eatFood(String foodName) {
            System.out.println(this.name + foodName);
        }
    
        @Override
        public String toString(){
            return "12345678";
        }
    }
    

    而不同于OC的语法,把属性、方法等的声明与实现分割到.h与.m文件中,不过据我所知,C++、C#等高级语言在这块和Java如出一致,也许只有OC秉承着C的精神还把声明与实现分成两个文件。

    1.权限修饰符

    在OC中我们通过publicprivateprotecteddefault(缺省)的修饰符确定属性的权限,方法通过是否在.h中声明来区分是否可以被别的类调用。而在Java中,publicprivateprotected不仅可以确定属性的权限,还可以确定类与方法的权限。
    对于属性和方法而言,修饰符确定的权限如下:

    修饰符 类内部 同一个包 子类 任何地方
    private YES
    default YES YES
    protected YES YES YES
    public YES YES YES YES

    对于类而言只能使用publicdefaultpublic可以在任何地方被访问(前提当然是引用类所在的包),default只可以被同一个包内部的类访问。

    2.运算符与条件判断语句

    这两个放一块说是因为基本上和OC一样,只是Java的switch语句可以以字符串作为判断条件。数组上也和C语言一致,在初始化的时候大小就固定,不能在扩充。

    3.重载

    这是OC与Java很大的一个不同点,因为OC是没有重载这个概念的,在Java中同一个类中满足方法名相同参数列表不同这三个条件就构成重载,比如下面这个两个方法,一个无参,一个有个String类型的参数,个人觉得很实用:

        public void eatFood(){
            System.out.println(this.name + "吃饭");
        }
        public void eatFood(String foodName) {
            System.out.println(this.name + foodName);
        }
    

    4.this与super

    这里和OC很像,this表示调用this所在代码块的对象,和OC中的self一致,super表示调用super所在代码块的对象的父对象,和OC中的super一致。

    5.其他一些诸如局部变量、形参、实参等概念据我所知的几种语言是一致的,在此不在赘述

    二、类的成员

    1.类的属性

    在第一段代码和上述的描述中我们可以看到类的属性和OC一样,有getter与setter方法,需要注意的是直接调用属性是不会走getter或setter方法的,需要手动的去调用getter与setter方法,也许是因为Java没有OC中@property自动合成_属性而导致这样设计的原因吧。

    2.类方法与实例方法

    在Java中,类方法通过static声明,比如下面的代码

    public class Animal {//Animal类
        //实例方法
        public void eatFood(String foodName) {
            System.out.println(this.name + foodName);
        }
        //类方法
        public static void eat(String foodName) {
            System.out.println(foodName);
        }
    }
    

    在调用上也和OC非常相似,OC通过[对象 消息]调用方法,而Java通过对象.消息调用方法

    public class TestAnimal {
        public static void main(String args[]){
            Animal animal = new Dog();
    
            animal.eatFood();
            animal.eatFood("骨头");
            Animal.eat("骨头");
        }
    }
    

    3.构造器

    乍看上去很高端的样子,其实和OC中alloc] init]的作用是一致的,为对象分配内存空间初始化,语法是这样的,比如Animal类的构造器为public Animal(),每个类默认有无参的构造器,有参的构造器可以是这样的public Animal(String name),多个构造器之间构成重载。

    三、面向对象的特征性

    我们都知道OOP有三大特征性:封装、继承与多态,那么Java相比OC有什么不同呢?先抛出结论,个人觉得是没什么区别的,个人认为封装、继承与多态更侧重于思想,而不局限于语言,语法上虽然有点区别,但是只是表面上不同罢了。

    1.封装

    Java中有个包(package)的概念倒值得一说,为了更好地组织类,Java 提供了包机制,和C++的命名空间有点类似。通常Javaer把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。不同的包中的类的名字是可以相同的,这相比于OC而言,实在是个很大的亮点。

    2.继承

    Java通过 class Dog extends Animal来实现继承,Dog类继承于Animal类,和OC一样,Java中的父类引用也可以指向子类对象,子类继承父类公开的属性和方法,并且Java也支持单继承,OC通过扩展与类别解决OC单继承的局限性,而Java通过接口解决单继承的局限性,23333。

    3.多态

    什么是多态,当编译时的类型与运行时的类型不一致,就会出现多态,子类对象可以通过父类引用可以调用父类被重写的方法,应用上非常广泛。

    总结:

    这几天差不多就看了这些东西吧,有些东西没写出来,太零散了,总得来说语法上没多大差别,下周争取说一些Java特有的东西。

    相关文章

      网友评论

          本文标题:JAVA学习笔记(二)

          本文链接:https://www.haomeiwen.com/subject/lwtprftx.html