从C++到java(二)

本文详细介绍了Java的基础语法,包括运算符、表达式、语句、类与对象等内容。重点讲解了不同类型运算的结果精度、条件语句与循环语句的使用、数组的定义与遍历方式、类与对象的概念及创建过程等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三章 运算符,表达式和语句

1.各类型的精度  从小到大  byte  short  char int  long  float  double

如果混合类型运算中最高精度为long,float,double或者int,则最后结果分别为long,float,double或者int型,若最高精度小于int,最后结果为int型(用C++试了,short+char变成int。但是由于java没有sizeof所以就没有试)  其中运算指加减乘除,按位与或。

2.+-*/,关系,赋值,按位与或,按位异或(符号^,相同为0,不同为1)都相同

3.if,switch,for,while,break,continue都一样。其中要注意,break和continue是针对所在最小的循环而言

4.若有枚举变量

enum Weekday{

sun,mon,tue

}

则Weekday.value()表示sun,mon,tue组成的数组

可以定义 Weekday []a=Weekday.value();

 System.out.print(a[1]);

Java的数组定义支持两种格式:
int[] a和int a[]
前者是Java推荐的格式
后者是为了迎合C语言入门的编程人员的习惯

5.若有数组

for(声明循环变量  :  数组的名字)

例如

       int []b=new int[4];

       for(int i=0;i<4;i++)

           b[i]=2*i+1;

       for(int i : b)//只能在括号里定义,i依次取a数组的每一个元素的值

           System.out.println(i);

第四章 类与对象

简介

1.java是一种面向对象的语言,具有封装性,继承,多态的特点。

1.关于类的变量的有效范围

class a{

int i=0;//此时i等于0

{

int i=1;//此时i等于1 局部优先

this.i=2;//此时this.i等于2

}

//此时i等于0

}

2.命名,第一个字母小写,其他大写(变量,方法)

3.方法的重载。方法的名字一样,但是参数不一样。比如返回面积 float getArea(int r)//PI*r^2  floatgetaArea(int x, int y)//x*y 注意参数不同,返回类型不同不行

4.实例变量和类变量,实例方法和类方法。其中加static的是类变量和类方法。

5.

a.对变量的操作只能放在方法里,比如int a=0;valid  but  int a; a=0;invalid

b.实例方法既能对类变量也能对实例变量进行操作,能对类方法和实例方法进行调用,但是类方法只能对类变量进行操作,也只能调用类方法。

对象

1.创建一个类对象

class student

{

int a;

student(int b)

{

a=b;

}

}

student qiaozhijian=new student();//注意跟C++的类初始化不同。此时分配空间,默认值0。当没有构造方法或者有几个并且声明了无参数的默认构造方法。

student zhangyuchen=new student(0);//使用了自己设置的构造方法

2.对象的引用和实体

        a,java的对象在堆中分配内存,对象的引用是在栈中分配内存。当类创建一个对象时,类中的成员变量在堆中分配内存空间,这些内存空间称为变量的实体或者对象的变量,而对象中存放着引用,引用在栈中分配内存,确保实体由该对象操作使用。

b,两个类,p1,p2。p1=p2代表把p2的引用给p1,此时他俩的实体就相同了。

c,没有实体的对象叫做空对象,如果使用空对象就会产生nullpointerexception的错误报告,并且编译的时候不能检测,因此我们要注意。

d,java有垃圾回收机制,会周期的检测某个实体是不是已不再被任何对象使用。因此我们不用跟C++一样去释放内存。例如p1的实体到最后就会被释放掉。因此,java也很少出现内存泄漏,即程序忘记释放内存而导致内存的溢出。

参数传值

1.基本类型参数的传值:只能把低的传给高的,比如把int传给double

2.引用类型参数的传值,如数组,对象,接口,都是传他们的引用,因此改变参数的实体也会改变原函数的实体。

3.方法中的and so on 比如:

方法 float g(float a, int...x)//表示不确定数量的几个int型的x

{

for(int i=0;i<x.length;i++)//x.length表示实际输入的x的个数

{

int sum=0;

sum=sum+x[i];//表示第几个x

}

}

对象的组合

同一目录下的源文件的类可以相互调用

STATIC

关于类变量和实例变量

1.一个类创建的不同对象被分配不同的内存,但是类变量却是被共享的

2.改变其中一个对象的类对象,其他对象的类对象也被改变,因为两者本身就是一回事

3.在把类的字节码加载到内存的时候,同时也会给类变量分配空间。可以用类名调用类变量。

关于类方法和实例方法

1.在创建类时就和类变量一起被分配内存

2.因此可以不适用实例变量,仅用类变量就完成任务吗,节省了内存资源。

THIS

this.变量=类名.变量    this.方法=类名.方法  和C++差不多的

注意,如果方法的局部变量和成员变量相同,不能省去this,其他情况都是可以的

1.作用:包名的目的是有效的区分名字相同的类。不同源文件的两个类的名字相同时,可以通过类属不同的包来区分。

2.package  关键字  package 包名

3.package sunrise //写在源文件的开头

package sun.com.cn//表示得到的类的字节码文件保存在如d:\summer\sun\com\cn里

4.运行有包名的主类时,就要到其上一层目录中,用字java运行,比如 d:\summer\java sun.com.cn.main.java   //其中main是主类,.java是后缀(这是命令行运行,我没用过,前面说到了,我用Android studio直接编译的)

5.编译时  用字javac,也要在上一层,如 d:\summer javac \sun\com\cn\main.java 编译后就会生成.class文件

6.建议包名用自己公司的域名倒置,如cn.com.action。而且不用java做包名。

7.如果没有包名,只要字码节在一个目录里就属于同一个包,虽然还是没有包名

import

1.引用类库中的类。import语句要写在package和类名的中间。

有很多类库,比如java.until 数据结构类

import java.until.*表示引用所有的类

import java.until.Date 表示只引用until里的Data类(其中java.lang是核心类库,不用我们引用。并且import只会增加编译时间不会影响性能,我们只给用的着的类分配空间)

2.引用自定义包的类。

这点对于命令行来说还有一些步骤,我就不多说了。

简单地   import sun.com.cn.*

3.引用无包名的类

把类放到想引用他的类的同目录下。

4.有三个类都叫A,分别没有包名,包名是B,和C

那么 A是没有包名的类

B.A  C.A  分别是有对应包名的类

访问权限

private 只能自己的类访问

public 同一个包,被import后的别的包都能

protected 同一个包被访问,其他的包不行

friend  当没有前面三个时,就是友元的 ,访问权限和protected暂时一样,在后面讲到子类时还会继续说

private和protected不能修饰类

基本类型的类包装

基本用不到

反编译和文档生成器

javap和javadoc暂时用不到

jar文件

命令行的,不是很想了解,以后慢慢看。现在用不到,谁让我上来就Android studio了呢

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值