JAVA学习笔记(二)

前言:

这几天看了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特有的东西。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • 1.十进制-->二进制:十进制转为二进制主要是对十进制数进行除2运算 2.二进制-->十进制:二进制乘以2的过程 ...
    晨星资源阅读 392评论 0 0
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,053评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,622评论 18 399
  • 今天上午爸爸带着我们和其他人一起去电影院看新的电影叫做《红海行动》,可是我们到的时候已经开始了很长时间了...
    博涵2008阅读 240评论 0 0