一:局部变量和实例变量

  • 定义变量是指设定变量的数据类型和变量的名字,Java语言要求变量遵循先定义,再初始化,然后使用的规则。

  • 作用域:指它的存在范围,只有在这个范围内,程序代码才能访问它。

    变量的生命周期是指从一个变量被创建并分配内存空间开始,到这个变量被销毁并清除其所占用内存空间的过程。

    局部变量(参数变量也可以看成是局部变量):

    1)位置:定义在方法中或者在方法中的{}

    2)使用:先赋值后使用

    3)作用域:定义的方法中或者定义的{}中

    4)生命周期:从变量的定义到方法调用结束

    局部变量的例子:
    public void method1() {
    int a = 0; //局部变量,作用域为整个method01方法;
    { int b = 0; //局部变量,作用域为所处的代码块;
    b = a;
    }
    b = 20; //编译出错,b不能被访问;
    }

    实例变量:

    1)位置:定义方法外,类里面

    2)使用:系统会进行默认初始化

    3)作用域:作用于整个类

    4)生命周期:从对象创建的时候到gc回收内存结束

    实例变量的例子:
    class Test {
    private int n1=0;
    private int n2=0;
    public int add() {
    int result = n2 + n2;
    return result;
    }
    }

二:操作符:

  • 操作符能与相应类型的数据组成表达式,来完成相应的运算。

    a)数学运算操作符

    +数据类型值相加或字符串连接;
    System.out.println(1+2+"a");          //输出3a
    System.out.println(1+2.0+"a"); //输出3.0a
    System.out.println(1+2.0+"a"+true); //输出3.0atrue
    System.out.println("a"+1+2); //输出a12
    System.out.println(1+"a"+2); //输出1a2
    /整除, 如操作数均为整数,运算结果为商的整数部分
    int a1=12/5;      //a1变量的取值为2
    int a2=13/5; //a2变量的取值为2
    int a3=-12/5; //a3变量的取值为-2
    int a4=-13/5; //a4变量的取值为-2
    int a5=1/5; //a5变量的取值为0
    double a6=-12/5; //a6变量的取值为-2.0
    double a7=-12/5.0; //a7变量的取值为-2.4
    %取模操作符, 如操作数均为整数,运算结果为商的整数部分
    int a1=1%5;      //a1变量的取值为1
    int a2=13%5; //a2变量的取值为3
    double a3=1%5; //a3变量的取值为1.0
    double a4=12%5.1; //a4变量的取值为1.8000000000000007 /整除, 如操作数均为整数,运算结果为商的整数部分
    int a1=12/5; //a1变量的取值为2
    int a2=13/5; //a2变量的取值为2
    int a3=-12/5; //a3变量的取值为-2
    int a4=-13/5; //a4变量的取值为-2
    int a5=1/5; //a5变量的取值为0
    double a6=-12/5; //a6变量的取值为-2.0
    double a7=-12/5.0; //a7变量的取值为-2.4
    %取模操作符, 如操作数均为整数,运算结果为商的整数部分
    int a1=1%5;      //a1变量的取值为1
    int a2=13%5; //a2变量的取值为3
    double a3=1%5; //a3变量的取值为1.0
    double a4=12%5.1; //a4变量的取值为1.8000000000000007

    b) 赋值操作符:

          = :   int x=0,i=1,j=1;
    *=: 这里的"*="由操作符"*"和"="复合而成,它等价于 a=a*b,这种 复合操作符能使程序变得更加简洁。
    /=: a/=b 等价于 a=a/b;
    %=: a%=b 等价于 a=a%b;
     注意:+=和+的区别
    如:short a=0;
    int b=123456;
    a+=b;和a=a+b;的区别:
    +=系统会进行隐式的数据类型转换,向=左边的数据类型进行转换。
    a+b会向数据类型高的类型转换

    c) 比较操作符

>大于
>= 大于等于
< 小于
<= 小于等于
以上操作符只适用于整数类型和浮点数类型;
int a=1,b=1;
double d=1.0;
boolean result1 = a>b; //result1的值为false;
boolean result2 = a<b; //result2的值为false;
boolean result3 = a>=d; //result3的值为true;
boolean result4 = a<=b; //result4的值为true;

instanceof

判断一个引用类型所引用的对象是否是一个类的实例。该操作符左边是一个对象,右边是一个类名或接口名。形式如下:

如:String str="hello"
System.out.println(str instanceof String);
System.out.println(str instanceof Object);
System.out.println(str instanceof Student); //false

java.lang.Object是所有类的父类, 每一个类都会默认继承Object

子类是一个父类 是is a的关系

d)相等操作符

== 等于

!= 不等于

既可以是基本类型,也可以是引用类型:

基本数据类型比较是真正的数值

引用类型比较的是地址,如果要比较引用类型真正的数据使用equals

如:int a=1,b=1;
System.out.println(a==b); //输出true;
如:String s1="hello";
String s2="hello";
String s3=new String("hello");
String s4=new String("hello");
System.out.println(s1==s2); //true
System.out.println(s3==s4); //false
System.out.println(s1==s3); //false
System.out.println(s3.equals(s4)); //true

e) 移位操作符,针对二进制操作

算术右移位运算,也称做带符号右移位运算。最高为补符号位。
> 逻辑右移位运算,也称为不带符号右移位运算。
> << 左移位运算,也称为不带符号左移位运算。

f) 位运算操作符

&:	与运算,运算规则为:1&1->1, 1&0->0, 0&1->0, 0&0->0;
|: 或运算,运算规则为:1|1->1, 1|0->1, 0|1->1, 0|0->0;
^: 异或运算,运算规则为:1^1->0, 1^0->1, 0^1->1, 0^0->0;
两个值相同为0,不同为1;
~ : 取反运算, ~1->0, ~0->1; 例如:8>>2====>8/2^2=2
8:0000...00001000
0000.........10 ====>2
8>>>3=====>8/2^3=1
8:0000...00001000
00000000.000001=====>1
8<<2======>8*2^2=32
8:0000...00001000
000000000100000======>32
1&1=1 1&0=0 0&0=0
1|1=1 1|0=1 0|0=0
1^1=0 1^0=1 0^0=0
~1=0
~0=1
8&2=0 8|2=10 8^2=10
~8=
~2= 1010
10===>第三位置1===>14
10===>第二位清0===>8
10===>第一位置反===>11
10===>输出相应的二进制

f) 逻辑操作符

短路操作符:	如果能根据操作左边的布尔表达式就能推算出整个表达式的布尔值,将不执行操作符右边的布尔表达式;
&&:左边的布尔表达式的值为false, 整个表达式值肯定为false,
此时会忽略执行右边的布尔表达式。
||:左边的布尔表达式的值为true, 整个表达式值肯定为true,
此时会忽略执行右边的布尔表达式。
if(条件1&&条件2){}
if条件1为假,不会执行条件2
if条件1为真,会执行条件2
if(条件1||条件2){}
if条件1为真,不会执行条件2
if条件1为假,会执行条件2

g) 条件操作符

布尔表达式 ? 表达式1 : 表达式2
如果布尔表达式的值为true,就返回表达式1的值,否则返回表达式2的值。
int score = 61;
String result = score>=60?"及格":"不及格"; h)++,--
前++与后++
前--与后--
int a=10;
b=++a =====>a=11,b=11,先计算,后赋值
b=a++ =====>a=11,b=10,先赋值,后计算
System.out.println("a:"+a+" b:"+b);

三.数据类型的转换

1)基本数据类型转换

隐式的数据类型转换:精度小的数据给精度大的数据
强制(显式)的数据类型转换:(type)精度大的数据给精度小的数据
System.out.println((int)(char)(byte)-1);
数据类型在转换的时候注意:
a)如果将精度小的数据转为精度大的数据时。
如果转之前是有符号数,在前面补符号位
如果转之前是无符号数,在前面补0
b)如果将精度大的数据转为精度小的数据时。
从低位窃取位数

2)引用数据类型转换

隐式的数据类型转换:子类转换父类
强制(显式)的数据类型转换:父类转换子类
String str="hello";
Object o=str;
String str2=(String)o;

java学习笔记(基础篇)—变量与表达式的更多相关文章

  1. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

  2. Java学习笔记——基础篇

    Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!! 学习笔记: *包.权限控制 1.包(package) ...

  3. java学习笔记(基础篇)—面向对象编程之封装、继承、多态

    一. OOP中的基本概念 Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-Oriented Programming, OOP), 它允许设计者将面向对象设计实现为一 ...

  4. java学习笔记(基础篇)—java数组

    一:什么是数组,什么时候使用数组? 数组是用来保存一组数据类型相同的元素的有序集合,数组中的每个数据称为元素.有序集合可以按照顺序或者下标取数组中的元素. 在Java中,数组也是Java对象.数组中的 ...

  5. Java学习 (七)基础篇 变量

    变量 变量顾名思义,就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单位,其要素包括变量名.变量类型和作用域 type varName [=val ...

  6. java学习笔记(基础篇)--java关键字与数据类型

    java关键字与数据类型 Java语言的关键字是程序代码中的特殊字符.包括: . 类和接口的声明--class, extends, implements, interface . 包引入和包声明--i ...

  7. java学习笔记(基础篇)—抽象与接口的区别

    抽象与接口的区别 一.抽象(abstract) 1. 抽象方法 1) 作用:定义规范 2) 抽象方法用来描述具有什么功能,但不提供实现. 3) 如果类中一个方法没有实现就要定义一个抽象方法. 2. 抽 ...

  8. java学习笔记(基础篇)—数组模拟实现栈

    栈的概念 先进后出策略(LIFO) 是一种基本数据结构 栈的分类有两种:1.静态栈(数组实现) 2.动态栈(链表实现) 栈的模型图如下: 需求分析 在编写代码之前,我习惯先对要实现的程序进行需求分析, ...

  9. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

随机推荐

  1. Win8 Metro(C#)数字图像处理--2.48Canny边缘检测算法

    原文:Win8 Metro(C#)数字图像处理--2.48Canny边缘检测算法  [算法说明] Canny边缘检测算法可以分为4步:高斯滤波器平滑处理.梯度计算.非极大值抑制.双阈值边缘检 测和 ...

  2. System.Exception: ORA-12541: TNS: 无监听程序

    今天在一个服务器上发布一个web服务(数据库也装在这台机器上):开发工具 Visual Studio 2008 Oracle但是部署好,浏览的时候报错了:System.Web.Services.Pro ...

  3. WPF使用Font-Awesome字体

    官方网站:https://fontawesome.com/ 使用教程: 学习WPF——使用Font-Awesome图标字体 - liulun - 博客园https://www.cnblogs.com/ ...

  4. Android疑难杂症之Theme

    背景:最近在把自己之前写的一个应用换成Material Design风格,在看官方Guide后动手试了一试,没想到出门就遇到了坑,在换成Material Design风格的主题后,我设置了一下colo ...

  5. 【MVC 笔记】MVC 自定义 Attribute 属性中的猫腻

    原想在 MVC Action 上加一个自定义 Attribute 来做一些控制操作,最先的做法是在自定 Attribute 中定义一个属性来做逻辑判断,可惜事与愿违,这个属性值居然会被缓存起来,于是于 ...

  6. 给 Web 开发人员推荐的通用独立 UI 组件(二)

    现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...

  7. T4随记

    关于T4模板的信息我就不赘述了,百度一大堆 MSDN的介绍 https://msdn.microsoft.com/zh-cn/library/bb126478.aspx 下面是简单的一个示例,从类中获 ...

  8. MSB3268 .Net 4.0工程 引用BCL错误

    Severity Code Description Project File Line Suppression StateWarning MSB3268 The primary reference & ...

  9. ABAP中SPLIT关键字 当分隔符位于字符串首尾时

    使用SPLIT关键字将一个字符串按某个分隔符拆分,如果分隔符穿插在字符串中间(即首尾字符均不是分隔符的情况),我们很容易知道拆分后的结果,但如果分隔符恰好位于字符串首或者末尾呢? 如下面的代码所示,在 ...

  10. Flutter学习笔记(2)--Dart语言简介

    Dart简介: Dart诞生于2011年10月10日,Dart是一种"结构化的web编程"语言,Dart虽然是谷歌开发的计算机编程语言,但后来被ECMA认定位标准,这门语言用于We ...